【发布时间】:2015-01-28 16:21:57
【问题描述】:
我正在尝试使用 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 ....
【问题讨论】:
-
您正在连接到 POP3s,这是基于 SSL 的 POP3。您需要先启动 SSL 连接。比较
nc -v 188.125.69.47 995(那里什么都没有)和openssl s_client -connect 188.125.69.47:995(+OK hello...)。