Connect()返回0 Linux套接字编程(c/c++) 所以我尝试编写一个简单的C++套接字程序Ubuntu,它所做的一切都是连接到谷歌,告诉我它是通过端口80完成的。我决定打印connect和socket命令的结果。代码如下: #include<stdio.h> #include<sys/socket.h> #include<arpa/inet.h> //inet_addr #include<iostream> int main(int argc , char *argv[]) { int socket_desc; struct sockaddr_in server; //Create socket socket_desc = socket(AF_INET , SOCK_STREAM , 0); std::cout << socket_desc; if (socket_desc == -1) { printf("Could not create socket"); } server.sin_addr.s_addr = inet_addr("172.217.12.46"); server.sin_family = AF_INET; server.sin_port = htons( 80 ); //Connect to remote server std::cout << (connect(socket_desc , (struct sockaddr *)&server , sizeof(server))); if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0) { puts("connect error"); return 1; } puts("Connected"); return 0; }

Connect()返回0 Linux套接字编程(c/c++) 所以我尝试编写一个简单的C++套接字程序Ubuntu,它所做的一切都是连接到谷歌,告诉我它是通过端口80完成的。我决定打印connect和socket命令的结果。代码如下: #include<stdio.h> #include<sys/socket.h> #include<arpa/inet.h> //inet_addr #include<iostream> int main(int argc , char *argv[]) { int socket_desc; struct sockaddr_in server; //Create socket socket_desc = socket(AF_INET , SOCK_STREAM , 0); std::cout << socket_desc; if (socket_desc == -1) { printf("Could not create socket"); } server.sin_addr.s_addr = inet_addr("172.217.12.46"); server.sin_family = AF_INET; server.sin_port = htons( 80 ); //Connect to remote server std::cout << (connect(socket_desc , (struct sockaddr *)&server , sizeof(server))); if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0) { puts("connect error"); return 1; } puts("Connected"); return 0; },c++,c,linux,sockets,C++,C,Linux,Sockets,夜深了,我懒得插队 所以我的问题是:0是否意味着未发送数据或未建立连接?为什么即使0=0不小于0,它也会执行代码的connect错误行 感谢您的帮助 connect返回值0表示连接成功 但是在您使用将connect中的返回值直接打印到std::cout之后: 致: 0是否表示未发送数据或未建立连接?为什么即使0=0不小于0,它也会执行代码的connect错误行?仅因为第一次连接返回0并不意味着第二次连接也返回0当系统调用出错时,仅输入自己的消息是不够的。您必须通过errno或strerror或p

夜深了,我懒得插队


所以我的问题是:0是否意味着未发送数据或未建立连接?为什么即使0=0不小于0,它也会执行代码的connect错误行


感谢您的帮助

connect返回值0表示连接成功

但是在您使用将connect中的返回值直接打印到std::cout之后:

致:


0是否表示未发送数据或未建立连接?为什么即使0=0不小于0,它也会执行代码的connect错误行?仅因为第一次连接返回0并不意味着第二次连接也返回0当系统调用出错时,仅输入自己的消息是不够的。您必须通过errno或strerror或perror显示实际错误。如果您这样做了,您会立即看到套接字已连接。此外,如果连接失败,您正在泄漏套接字。
30connect error
 //Connect to remote server
std::cout << (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)));
if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)    
{
    puts("connect error");
    return 1;
}
//Connect to remote server
result = connect(socket_desc , (struct sockaddr *)&server , sizeof(server));
std::cout << "connect result : " << result << std::endl;
if (result < 0)    
{
    puts("connect error");
    return 1;
}