IP 주소와 포트가 모두 사용되지 않음 netstat -a -n.
gdb를 사용하고 bind를 호출 할 때 정확한 IP 주소와 포트가 적절한 소켓 주소 길이 16과 함께 사용되는 것을 볼 수 있습니다. UDP Listener. 원격 IP는 정적이며 구성 파일에서 읽습니다. '요청 된 주소를 할당 할 수 없습니까?'
이
는이 GDB에서입니다void CSocket::Bind(IpEndPoint& endPoint)
{
int bindResult = bind(socketHandle, endPoint.GetSockAddrPtr(),
endPoint.GetAddrLength());
if(bindResult < 0)
{
TRACE_ERROR("Failed to bind to socket. %s. IpAddress %s Port %d AddrLength %d",
strerror(errno), endPoint.GetIpAddressString(),
ntohs(endPoint.GetPort()), endPoint.GetAddrLength());
,
Breakpoint 1, CSocket::Bind (this=0x819fa24, ipAddress="192.0.2.77", port=4185) at Socket.cpp:126
코드이며,이 내가 다시 봤는데
ERROR: Failed to bind to socket. errno 99 (Cannot assign requested address). IpAddress 192.0.2.77 Port 4185 AddrLength 16
위의 코드에서 TRACE_ERROR입니다 Beej's Guide to Network Programming을 읽었지만 실마리를 찾지 못했습니다. 이것은 UDP이므로 연결을 바인딩 할 필요가 없습니다. 방화벽이 꺼져 있습니다. 내가 어디에서보고 있니?
IP 주소가 문자열로 변환되는 방식을 봅니다. 필요한'struct sockaddr' 객체에 추가합니다. 로컬 주소에 실제로 바인딩 할 주소가 있습니까? 원격 호스트 일 경우 대신 connect를 사용하십시오. 포트가 이미 사용 중입니까? (...) – Aconcagua
그냥 팁 : 개인적으로 오류 문자열보다는 오류 코드를 선호합니다. 아마도 나는 유일한 것이 아닙니다. e를 사용하는 것이 좋습니다. 지. '% d (% s) ', errno, strerror (errno)'두 부분을 모두 만족시킵니다. – Aconcagua
@Aconcagua 감사합니다. 제안한대로 오류 코드가 추가되었습니다. UDP가 연결이 필요없는 경우'connect'가 필요한 이유는 무엇입니까? – jacknad