C语言 从套接字读取消息挂起



我正在尝试使用 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。

最新更新