套接字绑定不会返回int

das*_*hiz 3 c++ sockets tcp server

我的代码片段如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

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

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

有谁知道这可能意味着什么?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;
Run Code Online (Sandbox Code Playgroud)

谢谢!

sti*_*ijn 15

using namespace std;结合过多的标题包含可能是这里的罪魁祸首 - 这就是为什么它在这里一遍又一遍地重复不再使用它的原因.通过这样做,编译器看到bind并认为你的意思std::bind<functional>,而不是::bind套接字.所以,要么做正确的事情并审查你是否真的需要包含所有这些标题并使用声明去除它,或者使用::bind(编辑:或两者 - 用它::来表示你想要使用一些标准的API函数,这是不错的全局命名空间