[英]Reading message from socket hangs
我正在尝试使用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: %s\n", message);
close (sd);
其中ADDR
是ip, PORT
是我要连接的服务器的端口(在我的情况下为188.125.69.47和995)。 根据我在RFC中阅读的内容,在connect()
我应该收到以下消息:
+OK hello from ....
您的读取没有任何收益,因为服务器未发送任何数据。 没错,在POP3服务器中应该首先向您发送问候消息,但是当您通过端口995连接到POP3时 ,首先需要建立SSL会话。 但是,这需要客户端进行初始握手 。
您将需要一个库来建立SSL连接,然后使用POP3进行通信,例如OpenSSL 。
这个问题的答案也可能会有所帮助: 如何在C中通过SSL使用POP3 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.