我正在尝试使用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 ....
答案 0 :(得分:1)
您的阅读没有给您任何帮助,因为服务器没有发送任何数据。你是对的,在POP3服务器中应首先向你发送一个问候消息,但是当你连接到POP3 over port 995时,需要先建立SSL会话。但是,这需要来自客户端的初始handshake。
您需要一个库来建立SSL连接,然后在POP3中进行通话,例如OpenSSL。
这个问题的答案可能也有帮助: How to use POP3 over SSL in C