账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    socket编程 errno ECONNREFUSED EINPROGRESS
    73
    0
    #include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <cstdint>#include <stdio.h>#include <string>#include <assert.h>#include <arpa/inet.h>#include <string.h>#include "netStream.h"int SetNonBlocking(int nSockFd){ int nOldOption = fcntl(nSockFd, F_GETFL); if(nOldOption == -1) { assert(false); return -1; } int nNewOption = nOldOption | O_NONBLOCK; if(fcntl(nSockFd, F_SETFL, nNewOption) == -1) { assert(false); return -1; } return 0;}int main(){ struct sockaddr_in stServerAddress; bzero(&stServerAddress, sizeof(stServerAddress)); stServerAddress.sin_family = AF_INET; inet_pton(AF_INET, "127.0.0.1", &stServerAddress.sin_addr); stServerAddress.sin_port = htons(12345); int fd = socket(PF_INET, SOCK_STREAM, 0); assert(fd >= 0); SetNonBlocking(fd); int ret = connect(fd, (struct sockaddr*)&stServerAddress, sizeof(stServerAddress)); printf("ret = %d, errno is %d, error:%s\n", ret, errno, strerror(errno)); ret = connect(fd, (struct sockaddr*)&stServerAddress, sizeof(stServerAddress)); printf("ret = %d, errno is %d, error:%s\n", ret, errno, strerror(errno)); ret = connect(fd, (struct sockaddr*)&stServerAddress, sizeof(stServerAddress)); printf("ret = %d, errno is %d, error:%s\n", ret, errno, strerror(errno));}我的执行结果是:ret = -1, errno is 115, error:Operation now in progressret = -1, errno is 111, error:Connection refusedret = -1, errno is 115, error:Operation now in progress为什么第二个connect才是ECONNREFUSED,第一个connect其实就连不上。现在困惑的是哪些情况下返回ECONNREFUSED,哪些情况下返回EINPROGRESS,这两个错误码有什么区别呢?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 你不懂 普通会员 1楼

      这些错误码都是在Socket编程中常见的错误代码,它们分别表示不同的网络连接问题。

      1. ECONNREFUSED:这个错误表示服务器无法找到连接请求的客户端。通常,这意味着服务器正在处理一个正在进行的连接请求,但是这个请求已经结束,或者客户端没有足够的权限尝试连接。

      2. EINPROGRESS:这个错误表示一个连接正在进行中,但服务器仍然等待客户端的确认。这可能是因为客户端正在发送数据,或者服务器正在处理一个正在进行的连接请求。

      注意:这些错误代码只是表明客户端可能无法连接到服务器。在实际的编程中,你需要根据具体的错误信息来判断具体的错误原因。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部