Скорее всего, вы используете внутри предмета. Тогда вы можете сделать это
.item{
--border-width: 0;
}
Вызов для привязки функции возвратится-1, если будет ошибка. Это включает случай, где адрес уже используется.
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 12345
int main()
{
struct sockaddr_in addr;
int fd;
fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1)
{
printf("Error opening socket\n");
return -1;
}
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = 0;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_family = AF_INET;
if(bind(fd, (struct sockaddr *)&addr,sizeof(struct sockaddr_in) ) == -1)
{
printf("Error binding socket\n");
return -1;
}
printf("Successfully bound to port %u\n", PORT);
}
Это зависит немного от точно, что Вы пытаетесь протестировать.
Используя bind()
в способе, которым предложенный joelc скажет Вам, если порт будет открыт в каком-либо интерфейсе на Вашей машине. Хотя быть полными, необходимо не только проверять возвращаемое значение от bind()
, но также и проверка errno == EADDRINUSE
.
т.е. (модификация кода joelc)
if(bind(socket, (struct sockaddr *)&sin,sizeof(struct sockaddr_in) ) == -1)
{
if( errno == EADDRINUSE )
{
// handle port already open case
}
else
{
// handle other errors
}
}
Путем изменения адреса использовал в строке: например.
sin.sin_addr.s_addr = inet_addr("192.168.1.1");
... можно протестировать, доступен ли порт в определенном интерфейсе.
Знайте, хотя это это не идеальный тест для состояния порта. Если другой процесс имел открытый порт и был завершен, прежде чем он корректно закрыл порт (т.е. перед вызовом close()
на сокете), затем Вы будете обычно получать то же EADDRINUSE
ошибка. (в зависимости от того, была ли опция SO_REUSEADDR установлена на сокете),
(примечание стороны: если Ваше тестовое приложение не будет работать с необходимыми полномочиями, Вы не сможете связать () с любыми портами ниже 1024),
Как Анонимные предложенный, можно также взглянуть на netstat
. Это даст Вам всю ту же информацию, которую можно, неоднократно продвигаться называя bind()
намного более быстро и без любого из побочных эффектов (как он не должен на самом деле связывать с портами, которые сделали бы их неприменимыми к любым другим процессам). Просто вызов netstat -a --numeric-ports -t
и анализ вывода должен дать Вам все, что Вы после.
Комментарий moogs предложение, хотя - вызов telnet на каждом порте только скажет Вам, если сокет послушает на том порте - не, открыто ли это на самом деле.
Вы просто хотите протестировать, если конкретный порт используется в настоящее время? (и не должны действительно делать программу). Если так, можно использовать telnet:
серверный порт telnet
Если связь прерывается, она не используется. Если это соединяется и ожидает входа от Вас, это используется :)
Вы могли бы хотеть посмотреть на исходный код netstat. Я полагаю, что существует netstat в Солярисе также.