Я пытаюсь привязать сокет к IP-адресу и порту, на котором он будет прослушивать соединения. Вот мой соответствующий код (комментарии w и отладочные операторы печати)
#define PORTNUM 2345
int main(int argc, char *argv[])
{
// socket info about client connecting to server
struct sockaddr_in dest;
//socket info about server
struct sockaddr_in serv;
//socket used to listen for incoming connections
int mysocket;
//zero the struct before filling the fields
memset(&serv, 0, sizeof(serv));
//set connection type to tcp/ip
serv.sin_family = AF_INET;
//set should be be bound to ip of the machine on which process currently executing
serv.sin_addr.s_addr = htonl(INADDR_ANY);
//set server port number
serv.sin_port = htons(PORTNUM);
//create the socket to liste for connection
mysocket = socket(AF_INET, SOCK_STREAM, 0);
printf("value of socket:%d\n", mysocket);
// bind serv information to mysocket
int v= bind(mysocket, (struct sockaddr *)&serv, sizeof(struct sockaddr));
printf("value of bind: %d\n", v);
return 1;
}
Вот мои операторы печати отладки, когда я запускаю свой код
Value of socket: 3
Value of bind: -1
Когда я читаю документацию http://linux.die.net/man/2/bind, я видел, что функция привязки вернет -1 для ошибки (сбой привязки). Основываясь на моем коде, кто-нибудь знает, почему эта операция не удалась? Я просмотрел свой код и думаю, что у меня все настроено (все комментарии). Я даже убедился, что номер порта, который я использовал, находится в диапазоне, назначенном приложениям (1024 - 49151). На основе http://man7.org/linux/man-pages/man2/socket.2.html, я знаю, что сокет был успешно создан (возвращаемое значение 3, а не -1)
perror("bind");
, чтобы распечатать актуальную ошибку. Видите в этой документации, которую вы связали, все ошибки, которые может вернуть привязка? Они сохраняются в глобальной переменной с именемerrno
, к которой вы можете получить прямой доступ, включивerrno.h
.perror()
— вспомогательная функция, объявленная вstdio.h
. - person indiv   schedule 21.11.2014int v = bind(...); if( v < 0 ) { perror("bind"); }
- person indiv   schedule 21.11.2014