我正在尝试使用 TCP 连接到 pop3 邮件服务器,但是当我尝试在connect()
后立即read()
邮件时,控制台只是挂起。
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: %sn", message);
close (sd);
其中ADDR
是ip,PORT
是我尝试连接的服务器的端口(在我的例子中是188.125.69.47和995)。根据我在 RFC 中读到的内容,connect()
后我应该会收到以下消息:
+OK hello from ....
您的读取不会给您任何内容,因为服务器没有发送任何数据。您是对的,在 POP3 服务器中应该首先向您发送问候消息,但是当您通过端口 995 连接到 POP3 时,需要首先建立 SSL 会话。但是,这需要客户端的初始握手。
您需要一个库来建立SSL连接,然后在POP3中通信,例如OpenSSL。
这个问题的答案也可能有所帮助:如何在 C 中使用 POP3 over SSL。