리스닝 소켓이 논블록 소켓인 경우 TCP 연결이 아직 들어오지 않았으면 accept()는 블로킹 대신 would block 오류 코드를 줍니다. 이는 논블록 소켓이 수신할 데이터가 없을 때 recv()가 블로킹 대신 would block 오류 코드를 주는 것과 마찬가지입니다. select()를 갖고 리스닝 소켓에서 I/O 가능 이벤트가 감지되면 accept()를 호출하세요. 그러면 들어온 TCP 연결에 대한 소켓 핸들을 얻게 됩니다.
void NonBlockSocketOperation() { s = socket(TCP); // 논블록 소켓으로 변경 s.SetNonBlocking(true); s.listen(5000); while (true) { (socket, result) = s.accept(); if (result = = EWOULDBLOCK) { // 블로킹 걸릴 상황이었다. TCP 연결이 안 들어왔다. continue; } if (result = = OK) { // TCP 연결을 잘 받았다. } else { // 리스닝 소켓에 무슨 문제가 생겼다. } } }