第1关:阻塞
#include <sys/socket.h>
#include <fcntl.h>
void setsocketblock(int socketID)
{
int flags = fcntl (socketID, F_GETFL, 0);
if (flags & O_NONBLOCK)
{
fcntl (socketID, F_SETFL, flags&~O_NONBLOCK);
int recvTimeout = 5 * 1000;
setsockopt(socketID,SOL_SOCKET,SO_RCVTIMEO,(char *)&recvTimeout,sizeof(int));
}
}
第2关:非阻塞
#include <sys/socket.h>
#include <fcntl.h>
void setsocketunblock(int socketID)
{
int flags = fcntl (socketID, F_GETFL, 0);
if (0 == (flags & O_NONBLOCK))
{
fcntl (socketID, F_SETFL, flags|O_NONBLOCK);
}
}
第3关:阻塞与非阻塞切换
#include <sys/socket.h>
#include <fcntl.h>
void setsocketunblock(int socketID)
{
int flags = fcntl (socketID, F_GETFL, 0);
if (0 == (flags & O_NONBLOCK))
{
fcntl (socketID, F_SETFL, flags|O_NONBLOCK);
}
}
void setsocketblock(int socketID)
{
int flags = fcntl (socketID, F_GETFL, 0);
if (flags & O_NONBLOCK)
{
fcntl (socketID, F_SETFL, flags&~O_NONBLOCK);
int recvTimeout = 5 * 1000;
setsockopt(socketID,SOL_SOCKET,SO_RCVTIMEO,(char *)&recvTimeout,sizeof(int));
}
}