[英]How to bind address in socket programming in c/c++?
I want to bind address "95.96.10.1" with port number 8080. But when i tried below code it gave me error "address already in use".我想将地址“95.96.10.1”与端口号 8080 绑定。但是当我尝试下面的代码时,它给了我错误“地址已在使用中”。
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080
int main(int argc, char const *argv[])
{
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// Creating socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
&opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
// Forcefully attaching socket to the port 8080
if (bind(server_fd, (struct sockaddr *)&address,
sizeof(address))<0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
Please let me know how to bind address with port?请告诉我如何将地址与端口绑定?
Currently, you're binding to INADDR_ANY
which means to bind to all interfaces:目前,您正在绑定到
INADDR_ANY
,这意味着绑定到所有接口:
address.sin_addr.s_addr = INADDR_ANY;
If you want to bind to a specific address, you need to set it.如果要绑定到特定地址,则需要进行设置。 You can use the
inet_addr
function to convert an IPv4 string to an address value:您可以使用 inet_addr
inet_addr
将 IPv4 字符串转换为地址值:
address.sin_addr.s_addr = inet_addr("95.96.10.1");
Also, socket options can't be OR'ed together.此外,套接字选项不能一起 OR'ed。 You can only operate on one at a time.
您一次只能操作一个。
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.