를 재설정 후에도 0을 반환 내가 작성 및 POSIX socket
을 연결하고있어하는 아이 패드 응용 프로그램을 가지고있다. 원격 장치가 연결 시도를 거부하면 connect(...)
에 대한 호출이 예상대로 응답하지 않습니다.소켓에 연결() 피어가
내가 만들고 연결하고있어 방법의 간단한 예는 socket
: 대부분의 경우
struct sockaddr_in server;
server.sin_family = AF_INET;
int socket = socket(AF_INET, SOCK_STREAM, 0);
if(socket < 0)
{
NSLog(@"socket create failed: %s", strerror(errno));
}
else if(inet_aton(mAddress, &server.sin_addr))
{
server.sin_port = htons(mPortNumber);
if(connect(socket, (struct sockaddr *)&server, sizeof(server)) == -1)
{
NSLog(@"connect() failed: %s", strerror(errno));
}
else
{
NSLog(@"connect() succeeded");
}
}
, 위의 예 작동 : 예를 연결을 수락하는 원격 장치 (이후 '서버'라고 함)의 경우 connect()
은 예상대로 0
을 반환합니다. 존재하지 않는 주소의 경우 잠시 동안 connect()
블록이 반환되고 -1
이 반환되고 errno
은 ETIMEDOUT
이 반환됩니다. 서버가 연결 시도를 거부 할 경우 워드 프로세서
, 나는 ECONNREFUSED
혹은 ECONNRESET
로 -1
및 errno
에 대한 반환 connect()
을 기대. 대신 connect()
은 0
을 반환합니다.
:
클라이언트 (아이 패드) -> 서버 :
SYN, ACK
서버 -> 클라이언트 (아이 패드) :
RST, ACK
왜 반환 0
를 연결합니까?
업데이트 : 다른 클라이언트에서 동일한 서버에 연결, 예를 들어, Windows (Winsock?) 또는 Mac OSX (posix)의 Qt는 예상대로 작동합니다. 즉 connect()
은 -1
, ECONNREFUSED
을 반환합니다. 이것은 내가 서버 쪽보다는 아이 패드 쪽에서 문제라고 믿게한다.
:
나는 당신이이 글을 읽을했지만, 노트 아이폰 OS에서 POSIX 소켓을 사용하여 더 많은주의가 있다고 가정 'reject '가 tcp/ip 연결 설정의 잘 정의 된 동작 interms인지 확실하지 않으므로, 어떻게 정의하는지 자세히 설명하고 싶을 것입니다. – alk
'거절 된 연결'이 의미하는 것은 위와 같은 TCP 대화가있는 것입니다. 즉 클라이언트는 SYN으로 시도하고 서버는 'RST'로 답장합니다. 이것을 설명하기 위해 어떤 용어를 사용합니까? – sjwarner
iPad의 SYN에 대한 리모컨의'SYN-ACK' 메시지가 표시되지 않습니까? – alk