[완료] recvfrom 함수 질문
글쓴이: kgykingdom / 작성시간: 목, 2008/02/28 - 2:16오후
WSADATA wsaData; SOCKET sock; SOCKADDR_IN servAddr; SOCKADDR_IN ack; int nRet=0; int nAckLen=0; int nRecvLen=0; char lpBuf[BUF_SIZE]={0}; // if (WSAStartup(MAKEWORD(2,2), &wsaData) == SOCKET_ERROR) { m_strErr.Format(_T("WSAStartup() error: %d"), WSAGetLastError()); AfxMessageBox(m_strErr, MB_OK, 0); WSACleanup(); } // get socket sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock == INVALID_SOCKET) { m_strErr.Format(_T("socket() error: %d"), WSAGetLastError()); AfxMessageBox(m_strErr, MB_OK, 0); WSACleanup(); } servAddr.sin_family=AF_INET; servAddr.sin_addr.s_addr=htonl(INADDR_ANY); servAddr.sin_port=htons(5000); // bind() nRet = bind(sock, (SOCKADDR *) &servAddr, sizeof(servAddr)); if (nRet == -1) { m_strErr.Format(_T("bind() error: %d"), WSAGetLastError()); AfxMessageBox(m_strErr, MB_OK, 0); closesocket(sock); WSACleanup(); } // listen nRecvLen = recvfrom(sock, lpBuf, 4096, 0, (SOCKADDR *)&ack, &nAckLen); if (nRecvLen == SOCKET_ERROR) { m_strErr.Format(_T("recvfrom() error: %d"), WSAGetLastError()); AfxMessageBox(m_strErr, 0, 0); .... }
소켓 시작하는 함수에서 recvfrom()하면 원래 blocking 되어야 하는데.. 그냥 0x10014 에러 코드 발생하면서 종료되 버리네요.. WSAEFAULT 에러 설명 보면 bad address 라고 인수가 잘못됬다고 하는데.. 영 감이 안잡히네요. 이유 아시는 분은 좀 알려주세요. ㅜㅜ
그럼 모두 좋은 하루되세요..
Forums:
자문 자답
nAckLen = sizeof(SOCKADDR); 해서 넣어야 하는 거군요.. 몰랐네요.. ㅡㅡ;;
소켓 통신을 너무 오랜만에 하는지라.. ㅎㅎ
댓글 달기