gpt4 book ai didi

c++ - 套接字编程 C++ setsockopt()

转载 作者:行者123 更新时间:2023-11-27 23:48:56 28 4
gpt4 key购买 nike

我是套接字编程的新手。我正在尝试编写一个基本的套接字编程程序。我查看了 socket()、bind()、setsockopt() 函数和其他函数的用法以及工作代码示例。在 setsockopt() 函数中,我使用了 SO_REUSEPORT 选项,但是当我第一次在给定端口地址上运行程序时它工作正常,但是对于任何后续运行绑定(bind)失败,除非我更改为其他端口地址

我的代码示例:-

#include<iostream>
#include<cstdio>
#include<sys/socket.h>
#include<sys/types.h>
#include <netinet/in.h>
#include<unistd.h>
#include<cstdlib>
#include<cstring>
using namespace std;

int main(){

int opt=1;
socklen_t optlen=sizeof(opt);
char buffer[1024] = {0};
int sock=socket(AF_UNIX,SOCK_STREAM,0);
if(sock==-1)
{
cout<<"Socket Creation not successful"<<endl;
exit(1);
}
cout<<"Socket Created"<<endl;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR|SO_REUSEPORT,&opt,optlen);
struct sockaddr_in address;
address.sin_family = AF_UNIX;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(9091);

int addrlen = sizeof(address);
int x=bind(sock,(struct sockaddr *)&address,
sizeof(address));
if(x==-1)
{
cout<<"Binding Unsuccessful"<<endl;
exit(1);
}
cout<<"Binding successful"<<endl;

/*

if(x<0)
// {
// perror("Bind failed");
// exit(EXIT_FAILURE);
// }
int y=listen(sock,5);
int neww= accept(sock,(struct sockaddr *)&address,
(socklen_t*)&addrlen);
//int val=read(neww
cout<<sock<<endl;
cout<<x<<endl;
cout<<y<<endl;
cout<<neww<<endl;

cout<<"Haha";
int valread = read (neww , buffer, 1024);
puts(buffer);
send(neww,buffer,strlen(buffer),0);

*/

int c=close(sock);
cout<<c<<endl;
}

附言我是一个初学者,对上面使用的大部分参数了解不多

最佳答案

我想这就是你想要做的:

  const int opt = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt));

关于c++ - 套接字编程 C++ setsockopt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263191/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com