套接字绑定不会返回整数。

3
我的代码片段如下所示:
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;

谢谢!

1个回答

15

using namespace std; 加上过多的头文件可能是罪魁祸首 - 这就是为什么在SO上一遍又一遍地重复要使用它。这样做,编译器会看到bind并认为你想要从<functional>中使用std::bind,而不是用于套接字的::bind。因此,要么做正确的事情并检查您是否真的需要包含所有这些标头并且摆脱使用声明,要么使用::bind (编辑: 或两者都使用 - 使用::指示您要使用全局命名空间中的某个标准API函数是没有问题的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接