4
所以這是我的情況。我正在與winsock合作,學習一些關於網絡和協議開發的事情,並且我陷入了僵局。我現在正在做一個服務器,在一個接受調用時阻塞,但在後臺有另一個線程等待用戶輸入和處理用戶輸入。這個用戶輸入用於send,ping和say等命令,但是現在我想要一個叫做exit的命令來關閉winsock,釋放所有打開的連接,然後結束程序。問題是,這個接受線程仍然阻塞。,我將如何停止從另一個線程阻塞的接受函數?
所以這裏的問題。 1)反正是有阻塞,而這就是所謂的停止Winsock的功能,和2)在非阻塞模式是這樣的:
while(m_continue)
{
Sleep(1);
tempsock = accept(m_listenSock, NULL, NULL);
if(tempsock != INVALID_SOCKET)
{
if(WSAGetLastError() == WSAEWOULDBLOCK)
continue;
else
return 1;
}
break;
{
多餘或太inneficient使用?
哈,簡單。感謝一堆:P – FatalCatharsis 2012-04-14 06:51:20
這不適用於我在Windows 7上。closesocket()和accept()調用線程都被阻塞。 – wilx 2012-11-20 10:53:49
試試這個: 注意發出阻塞Winsock調用如accept時,Winsock可能需要等待網絡事件才能完成調用。在這種情況下,Winsock會執行一個可警告的等待,這可能會由同一個線程上安排的異步過程調用(APC)中斷。在APC內部發出另一個阻塞的Winsock調用,該調用在同一線程中中斷正在進行的阻塞Winsock調用將導致未定義的行爲,並且決不能由Winsock客戶端嘗試。 – 2015-08-24 09:39:32