【问题标题】:socket binding won't return an int套接字绑定不会返回 int
【发布时间】:2017-01-18 07:22:05
【问题描述】:

我的代码的 sn-p 如下所示:

int descriptor = socket(AF_INET, SOCK_STREAM, 0);
if(descriptor < 0){
    cerr << "Error establishing socket connection." << endl;
    return -1;
}
int port = 3400;
struct sockaddr_in address;
char buffer[140];
address.sin_family = AF_INET;
address.sin_addr.s_addr = htons(INADDR_ANY);
address.sin_port = htons(port);
int size = sizeof(address);
if(bind(descriptor,(struct sockaddr*)&address,size) < 0){
    cerr << "Error binding socket." << endl;
}
cout << "Waiting for connection on " << INADDR_ANY << " on port " << port << ends;

每当我尝试编译它时,我都会收到以下错误:

error: invalid operands to binary expression 
('__bind<int &, sockaddr *, int &>' and 'int')
if(bind(descriptor,(struct sockaddr*)&address,size) < 0){

有人知道这意味着什么吗? bind() 应该返回一个整数,或者我想。我的导入看起来像这样:

#include <iostream>     
#include <string.h>   
#include <string>       
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h>
#include <arpa/inet.h> 
#include <netdb.h>  
#include <unistd.h>
using namespace std;

谢谢!

【问题讨论】:

    标签: c++ sockets tcp server


    【解决方案1】:

    using namespace std; 加上过多的标头包含可能是这里的罪魁祸首 - 这是有原因的,它在 SO not to use it 上一遍又一遍地重复。通过这样做,编译器会看到bind 并认为您的意思是std::bind 来自&lt;functional&gt;,而不是::bind 用于套接字。因此,要么做正确的事并检查你是否真的需要包含所有这些标题并使用声明摆脱它,或者使用 ::bind (edit: 或两者兼而有之 - 使用 @987654328 也不错@ 表示你想使用全局命名空间中的一些标准 API 函数)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多