소켓
-
논블럭 소켓으로 connect 시 EAgain만 발생하던 현상프로그래밍/의문 2018. 7. 3. 08:38
if (IsOpen()){ return false;} m_nativeSocket = nn::socket::Socket(static_cast(GetProtocolFamily()), Type::Sock_Stream, Protocol::IpProto_Tcp); const bool opened = m_nativeSocket != SocketError; if (opened){ SetSocketOptions();} return opened; 소켓을 열고, 소켓 옵션을 적용한다. 적용할 소켓 옵션은 Nonblock으로, Poll api와 함께 사용될 것이었다. 그런데 connect를 진행했을 때, 항상 EAgain 에러가 나오더라. 하지만 에러와 무관하게 연결이 맺어졌고, 때문에 WouldBlock 같은 건가 싶어서..
-
poll api 이벤트들프로그래밍/기록, 개념, 용어 2018. 4. 18. 11:43
PollFd.events 에 체크할 이벤트 목록을 지정한다. |로 비트를 결합하여 여러 개를 줄 수 있다. PollFd fd;fd.events = PollRdNorm | PollWrNorm; Poll 함수가 성공적으로 호출되면 revents 인자에 감지된 이벤트가 등록되어있다. 여러 개의 이벤트가 한 번에 등록되며, bit연산자 and(&)를 통해 체크할 수 있다. Poll(fd); if(fd.revents & PollRdBand){// RdBand 처리 ...} if(fd.revents & PollRdNorm){// RdNormal 처리 ..} events와 revents에 세팅되는 이벤트의 의미는 다음과 같다. PollIn : 높은 우선 순위가 아닌 데이터를 읽을 수 있다. 블러킹 없이 PollPri..
-
서버 코딩 중 있었던 수신 직후 소켓이 닫히던 버그프로그래밍/의문 2015. 5. 25. 03:23
12345678910111213141516171819202122232425262728293031323334void User::CheckIoError(int result){ if (result == SOCKET_ERROR) { // ERROR_IO_PENDING 오버랩 연산이 성공적으로 시작되었으나, 나중에 완료될 것. const auto error = WSAGetLastError(); if (error != WSA_IO_PENDING) // * 이 부분이 error = WSA_IO_PENDING으로 되어있었다. {// 여기에 걸리면 진짜 오류다. this->Close(); /* WSAECONNABORTED 10053 타임아웃 혹은 상대방의 접속종료들과 같은 소프트웨어적인 문제로 연결이 끊겼음. WSAEC..