服务程序中的socket为何是阻塞的?
书上说WinSock支持阻塞,但不推荐。我看了一个服务程序是这么写的:
if (NULL == (ptrp = getprotobyname("tcp"))) return INVALID_SOCKET;
if (INVALID_SOCKET == (socketNew = socket(PF_INET, SOCK_STREAM, ptrp->p_proto)))
return FALSE;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(nPort);
if (FTP_DATA_PORT == nPort) bReuse = TRUE;
if ((SOCKET_ERROR == setsockopt(socketNew, SOL_SOCKET, SO_REUSEADDR, (LPCSTR)&bReuse, sizeof(bReuse))) ||
(SOCKET_ERROR == bind(socketNew, (sockaddr *)&addr, sizeof(addr))))
{...}
当accept(socketNew, NULL, NULL)时程序停在这,直到连接请求来时,才可继续往下,说明这个socket是阻塞的。
问题是我认为默认应该是非阻塞的,为什么会变成阻塞呢?