c++ - 套接字绑定(bind)不会返回 int

标签 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;

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

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/

相关文章:

tcp - 多个 "TCP/IP"模型层的校验和字段的设计需要?他们真的是多余的吗?

java - 从没有客户端的输入流读取数据 "flush()"

sockets - 为什么 'netstat' 无法检测到某些打开的套接字?

c++ - 我从指针得到一个未初始化的对象

c++ - 尝试将字符串读入多维 vector

c++ - std::array 的大小是否由标准定义

c++ - 发送到 : Network unreachable

java - 将图像从java客户端发送到python服务器

c++ - 将数组绑定(bind)到sql参数

php - socket_connect()函数中的问题