[완료] 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); 해서 넣어야 하는 거군요.. 몰랐네요.. ㅡㅡ;;
소켓 통신을 너무 오랜만에 하는지라.. ㅎㅎ
댓글 달기