본문 바로가기

공부/LinuxServer

2. 소켓에 정보 지정하기 - bind()

1. header

#include <sys/socket.h>

 

2. function

int bind(int socketfd, struct sockaddr* address, socklen_t addressLength);

1) int socket : socket()등으로 생성한 소켓 디스크립터.

2) struct sockaddr* address : 주소 정보를 담은 구조체. 통신 주체에 따라서 달라집니다.

struct

내용

sockaddr

기본 구조체.

sockaddr_in

AF_INET인 경우. (IPv4)

sockaddr_in6

AF_INET6인 경우. (IPv6)

sockaddr_un

AF_UNIX 또는 AF_LOCAL인 경우. (Unix Domain Socket)

3) socklen_t addressLength : address 구조체의 크기.

4) return :

성공

실패

0

-1

 

3. 사용

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#define PORT 80
int main()
{
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in addr;
	socklen_t len = sizeof(addr);

    addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);

	if(bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1){
		fprintf(stderr, "Bind Error : %s\n", strerror(errno));
		close(sock);
		return(-1);
	}else printf("bind\n");
}