[완료] recvfrom 함수 질문

kgykingdom의 이미지

	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 라고 인수가 잘못됬다고 하는데.. 영 감이 안잡히네요. 이유 아시는 분은 좀 알려주세요. ㅜㅜ

그럼 모두 좋은 하루되세요..

kgykingdom의 이미지

nAckLen = sizeof(SOCKADDR); 해서 넣어야 하는 거군요.. 몰랐네요.. ㅡㅡ;;

소켓 통신을 너무 오랜만에 하는지라.. ㅎㅎ