Сокет клиента Linux: невозможно установить O_NONBLOCK перед подключением? - PullRequest
1 голос
/ 15 марта 2011

Возможно ли реализовать неблокирующий клиентский сокет? Я пытался использовать

sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));

но когда приложение достигает оператора connect, оно существует со следующей ошибкой:

ERROR connecting: Operation now in progress

Мне нужно создать совершенно неблокирующий сокет, который даже не ждет TCP-рукопожатия. Возможно ли это с помощью стандартных функций сокетов или мне нужно заняться многопоточностью?

1 Ответ

2 голосов
/ 15 марта 2011

Полученная ошибка является нормальной в неблокирующем режиме. Это просто означает, что операция не может быть завершена немедленно. Это означает, что вам нужно дождаться окончания файлового дескриптора, прежде чем вы сможете его использовать.

Так работают неблокирующие розетки в C.

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