ошибка в привязке порта "Адрес уже используется" при программировании сокета TCP в unix - PullRequest
2 голосов
/ 09 февраля 2012

Я просмотрел много постов и форумов, и я новичок в программировании сокетов.Основные части моего кода похожи на ОШИБКА BIND: Адрес уже используется

, но затем я изменил свой код, добавив функцию «setsockopt» следующим образом:

const char* port="5555";
int opt=1;
portno=atoi(port);
//parameters for server address
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(portno);
serv_addr.sin_addr.s_addr=INADDR_ANY;
//bind the socket to the address
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char *)&opt,sizeof(int));


 if(bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{close(sockfd);
error("error in binding port!");
}

Но все равно я получаю ошибку.Я должен закрыть терминал и перезапустить его, чтобы снова использовать порт.Я хочу использовать порт в жестком коде (как я уже упоминал в коде выше)

                                                            Thanks a lot in advance

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Проверьте, используется ли порт. Либо telnet к этому порту, либо используйте netstat -a. Он должен использоваться (как указывает ошибка) и завершать соответствующий процесс. Возможно, используя ps, чтобы найти процесс.

1 голос
/ 09 февраля 2012

Номер порта может использоваться только одним приложением за раз. Это означает, что вы не можете запустить одну и ту же программу дважды, ожидая, что оба будут подключены к одному и тому же порту.

SO_REUSEADDR - это когда сокет, привязанный к адресу, уже закрыт, тот же адрес (пара ip-адрес / порт) может быть снова использован напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...