2014-11-30 1 views
1

TCP를 사용하여 POP3 메일 서버에 연결하려고 시도했지만 read() 메시지 바로 다음에 connect() 메시지가 표시되면 콘솔이 중지됩니다. ADDR소켓에서 메시지를 읽는 중 응답이 없습니다.

int sd; 
struct sockaddr_in server; 

if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { 
    perror ("Error: socket()\n"); 
    return errno; 
} 

server.sin_family = AF_INET; 
server.sin_addr.s_addr = inet_addr(ADDR); 
server.sin_port = htons(PORT); 

if (connect(sd, (struct sockaddr *) &server, sizeof(struct sockaddr)) == -1) { 
    perror("Error: connect()\n"); 
    return errno; 
} 

char message[100]; 
read(sd, message, 100); // <== here it hangs 
printf ("message: %s\n", message); 

close (sd); 

는 IP이며 PORT 내가 (내 경우 188.125.69.47과 995 년)에 연결하기 위해 노력하고있어 서버의 포트입니다. 서버가 데이터를 전송하지 않기 때문에,

+OK hello from .... 
+1

** POP3s **에 연결 중입니다. ** POP3는 SSL을 통해 POP3입니다. SSL 연결을 먼저 시작해야합니다. 'nc -v 188.125.69.47 995' (아무것도 없다)를'openssl s_client -connect 188.125.69.47 : 995' (* + OK hello ... *)와 비교하십시오. – tomasz

답변

1

당신의 읽기는 당신에게 아무것도 제공하지 않습니다 : 나는 RFC에서 읽은 바로는 는 connect() 후 나는 다음과 같은 메시지가 나타납니다. POP3 서버에서 먼저 hello 메시지를 보내야하지만, POP3 over port 995에 연결하면 SSL 세션을 먼저 설정해야합니다. 그러나 클라이언트의 초기 handshake이 필요합니다.

SSL 연결을 설정하고 POP3로 대화하려면 라이브러리가 필요합니다 (예 : OpenSSL).

이 질문에 대한 답변 : How to use POP3 over SSL in C.

+1

감사합니다. ssl을 사용하는 방법에 대한 [this] (http://savetheions.com/2010/01/16/quickly-using-openssl-in-c/) 예제를 발견했으며 현재 작동합니다. –

관련 문제