[英]Socket Programming C++ setsockopt()
我是套接字編程的新手。 我正在嘗試編寫一個基本的套接字編程程序。 我查看了socket(),bind(),setsockopt()函數以及其他函數以及工作代碼示例的用法。 在setsockopt()函數中,我使用了SO_REUSEPORT選項,但是,當我第一次在給定的端口地址上運行程序時,它可以正常工作,但是對於任何后續運行,綁定都將失敗,除非我更改為其他端口地址
我的代碼示例:-
#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;
}
PS我是一個初學者,對上面使用的大多數參數不太了解
我認為這是您想要做的:
const int opt = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.