Я надеюсь, что кто-то может объяснить ситуацию - любую ситуацию, - в которой неблокирующий сокет Windows не будет сразу возвращаться после использования send () для него. На других платформах мой код работает так, как задумано, поэтому, похоже, проблема связана с Windows.
Способ, которым я могу сказать, что он не возвращается, довольно прост: я cout
отправляю сообщение непосредственно до и после функции send (), а после запуска консоль показывает только первое сообщение. Я не могу воспроизвести его в упрощенном примере, поэтому я прошу прощения за отсутствие кода. Я постараюсь предоставить больше подробностей, если это необходимо.
Edit:
Ниже приведен конкретный код, в котором сокет создается и устанавливается как неблокирующий. Я предполагаю, что на самом деле неблокирующий сокет не будет вести себя таким образом, и что что-то еще вызывает его остановку до отображения второго сообщения. В любом случае, спасибо за вашу помощь ... Я сделаю все возможное, чтобы разобраться в этом, но сейчас я весьма озадачен.
SOCKET new_sock = accept(sock, (struct sockaddr*)&addr, &addr_size);
#ifdef _WIN32
unsigned long ul;
ioctlsocket(new_sock, FIONBIO, &ul);
#else
fcntl(new_sock,F_SETFL,O_NONBLOCK);
#endif
setsockopt(new_sock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg));
setsockopt(new_sock, SOL_SOCKET, SO_OOBINLINE, (unsigned char *)&opt, sizeof(int));