我的代码片段如下所示:
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;
谢谢!
最佳答案
using namespace std;
结合过多的 header 包含可能是这里的罪魁祸首 - 这是为什么它在 SO not to use it 上一遍又一遍地重复的原因。 .通过这样做,编译器看到 bind
并认为你的意思是std::bind
来自 <functional>
, 不是 ::bind
对于 socket 。因此,要么做正确的事情并检查您是否真的需要包含所有这些 header 并使用声明摆脱它,要么使用 ::bind
(编辑:或两者兼而有之 - 使用 ::
表示您想要使用全局命名空间中的某些标准 API 函数也不错)
关于c++ - 套接字绑定(bind)不会返回 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39423474/