从套接字读取消息挂起

时间:2014-11-30 16:11:11

标签: c linux sockets ssl pop3

我正在尝试使用TCP连接到pop3邮件服务器,但当我在read()控制台刚刚挂起后尝试connect()邮件时。

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);

其中ADDR是ip而PORT是我正在尝试连接的服务器的端口(在我的情况下是188.125.69.47和995)。 根据我在RFC中的内容,在connect()之后,我应该收到以下消息:

+OK hello from ....

1 个答案:

答案 0 :(得分:1)

您的阅读没有给您任何帮助,因为服务器没有发送任何数据。你是对的,在POP3服务器中应首先向你发送一个问候消息,但是当你连接到POP3 over port 995时,需要先建立SSL会话。但是,这需要来自客户端的初始handshake

您需要一个库来建立SSL连接,然后在POP3中进行通话,例如OpenSSL

这个问题的答案可能也有帮助: How to use POP3 over SSL in C