我想讓我的套接字「基於事件」。以下是我的嘗試:通過使插座事件驅動使udp套接字非阻塞
VOID createServerSocket()
{
WSADATA wsa;
//Initialise winsock//
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
//"WinSock Initialization FAILED",
}
//Create a socket//
SOCKET newSocketIdentifier;
SOCKADDR_IN newSocket;
if((newSocketIdentifier = socket(AF_INET , SOCK_DGRAM , 0)) == INVALID_SOCKET)
{
//Socket Creation Failed
}
//Socket Created//
//Prepare the sockaddr_in structure//
newSocket.sin_family = AF_INET;
newSocket.sin_addr.s_addr = INADDR_ANY;
newSocket.sin_port = htons(8888);
//Bind//
if(bind(newSocketIdentifier ,(struct sockaddr *)&newSocket, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
//Bind Failed
}
//Bind Done//
WSAEVENT NewEvent = WSACreateEvent();
WSAEventSelect(newSocketIdentifier, NewEvent, FD_READ | FD_WRITE); //made the socket "newSocketIdentifier" event based for events "FD_READ" and FD_WRITE
}
我不知道如何進一步處理。我應該如何檢查是否有任何期望的事件發生?我怎樣才能不斷地檢查這些事件?這將在一段時間(1)循環?
我在互聯網上找到的所有例子都是針對多個套接字的。但是,在我的情況下,我只有一個套接字,我想讓它成爲「事件驅動」讀寫。請幫幫我。我卡住了!
是的,你需要循環連續檢查事件和是選擇應該是用於多個套接字非阻塞。 – shazin 2013-05-07 06:55:38
@shazin:你能分享一些如何處理這些事件的例子嗎?我正在使用一個套接字而不是多個套接字。 – Ayse 2013-05-07 09:38:44
你在這裏沒有做任何事情。您正在通過阻塞I/O疊加多路複用的I/O。讀取和寫入操作可能仍會阻止。 – EJP 2013-05-07 10:13:16