结果太大的c ++套接字

时间:2011-02-04 02:22:03

标签: network-programming

我收到的错误为bind(),其值为34(结果太大),有人可以帮忙吗?

 void Connect(string address, unsigned short port){         
            memset(&server2, 0, sizeof(server2));
            server2.sin_family = AF_INET;  
            server2.sin_addr.s_addr = inet_addr(address.c_str());  
            server2.sin_port = htons(port);  

            desc2 = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);            
            if(desc2 == -1) {            
                cout << "Error in Socket()" << endl;    
            }

            if((::bind(desc2,(sockaddr*)&server2, sizeof(server2))) == -1) {                        
                cout << "Error in Bind() " <<  errno << endl;
            }

            if((::connect(desc2, (sockaddr*)&server2, sizeof(server2))) > 0) {                      
                cout << "Error in Connect()" << endl;    
            }
            cout << "YOU ARE CONNECTED TO " << address << " ON PORT " << port << endl;              
}
PS:我在1年前也遇到了这个错误,问题很简单我在初始化套接字地址时写了一些不好的东西,在哪里连接,但现在我再也不知道我犯了哪个错误。

2 个答案:

答案 0 :(得分:0)

我不知道为什么你得到'名字太长' - 没有看到server2如何被宣布和定义,就不可能确定。

但我知道在具有相同地址的同一套接字上调用bind()然后调用connect()将失败 - bind()正在分配本地地址到套接字,connect()连接到远程地址。为套接字的两端提供相同的地址只能结束。

bind()之前几乎没有协议需要connect()。 (例外情况将涉及“低于1024的端口只能通过root打开,因此我们可以信任此连接”的身份验证方式,这种方式尚未使用多年。请考虑rlogin。)

bind()电话之前,

listen()最有意义。客户端将尝试联系“众所周知的端口”上的服务器,bind()是您用于分配该名称的机制。

答案 1 :(得分:0)

我不知道究竟是什么原因导致您的问题返回该类型的结果。

您说您是代理服务器,因此您正在侦听传入连接。 试试这个:

server2.sin_addr.s_addr = 0;
server2.sin_family = AF_INET;
server2.sin_port = htons(port);

desc2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

// Puts the socket in listening mode, allowing 10 connection requests to queue.
bind(desc2, (sockaddr*)&server2, sizeof(server2));
listen(desc2, 10);

// Accepts the first connection request.
SOCKET accepted_socket = accept(desc2, NULL, NULL);
std::cout << "connection accepted!\n";

您可能希望学习如何异步编程。