이 름
send, sendto, sendmsg − 소 켓 으 로 부 터 의 메 시 지 를 보 낸 다 .
사 용 법
#include
<sys/types.h>
#include <sys/socket.h>
int
send(int s, const void *msg,
size_t len, int flags);
int sendto(int s, const void
*msg, size_t len, int
flags, const struct sockaddr *to,
socklen_t tolen);
int sendmsg(int s, const struct msghdr
*msg, int flags);
설 명
Send, sendto, 그 리 고 sendmsg 는 다 른 소 켓 으 로 메 시 지 를 보 내 는 데 사 용 된 다 . Send 은 소 켓 이 connected 상 태 에 있 을 때 사 용 된 다 . 반 면 sendto 와 sendmsg 언 제 든 사 용 할 수 있 다 .
목 표 의 주 소 는 to 가 그 것 의 크 기 를 정 하 는 tolen 과 함 께 주 어 진 다 . 메 시 지 의 길 이 는 len. 으 로 주 어 진 다 . 메 시 지 가 너 무 길 어 서 기 초 적 인 프 로 토 콜 을 사 용 해 자 동 으 로 넘 어 갈 수 없 다 면 , 에 러 EMSGSIZE 가 반 환 되 고 , 메 시 지 는 전 해 지 지 않 는 다 .
send. 에 는 전 달 을 실 패 할 징 후 는 없 다 . 국 부 적 으 로 지 적 되 는 에 러 는 −1의 반 환 값 에 의 해 지 적 된 다 .
메 시 지 가 소 켓 의 send 버 퍼 에 맞 지 않 으 면 , send 는 소 켓 이 non-blocking I/O mode에 있 지 않 는 다 면 일 반 적 으 로 막 는 다 non-blocking mode에 서 이 런 경 우 엔 , EAGAIN 을 반 환 한 다 . select(2) 호 출 은 언 제 다 음 자 료 를 보 낼 지 를 결 정 하 는 데 쓰 인 다 .
flags
매 개 변 수 는
flagword이 고 , 아 래 flag를
가 질 수 있 다 :
MSG_OOB
out-of-band data를 이 개 념 을 지 원 하 는 소 켓 으 로 보 낸 다 (e.g. SOCK_STREAM); 기 초 프 로 토 콜 은 반 드 시 out-of-band data를 지 원 한 다 ..
MSG_DONTROUTE
패 킷 을 전 송 하 는 데 게 이 트 웨 이 를 사 용 하 지 않 고 , 직 접 연 결 된 네 트 웍 을 통 해 서 호 스 트 로 보 낸 다 . 이 것 은 diagnostic 혹 은 routing program에 의 해 서 만 사 용 된 다 . 이 것 은 오 직 프 로 토 콜 군 을 위 해 서 만 정 의 된 다 ; 패 킷 소 켓 은 하 지 않 는 다 .
MSG_DONTWAIT
non-blocking operation을 가 능 케 한 다 ; operation이 막 혔 을 때 EAGAIN 가 반 환 된 다 . (이 것 은 또 한 O_NONBLOCK 을 F_SETFL fcntl(2) 와 함 께 사 용 하 는 것 을 가 능 하 게 할 수 있 다 .)
MSG_NOSIGNAL
다 른 한 쪽 끝 이 연 결 을 끊 었 을 때 , 소 켓 으 로 부 터 비 롯 된 스 트 림 상 의 에 러 에 SIGPIPE 을 보 내 지 않 도 록 요 구 한 다 . EPIPE 에 러 는 여 전 히 반 환 된 다 .
msghdr 구 조 에 대 한 설 명 을 보 려 면 recv(2) 을 보 라 . msg_control 와 msg_controllen 구 성 요 소 를 사 용 하 는 제 어 정 보 를 보 낼 수 있 다 . 커 널 이 처 리 할 수 있 는 최 대 제 어 버 퍼 의 길 이 는 net.core.optmem_max sysctl에 의 해 소 켓 단 위 로 제 한 되 어 있 다 . ; socket(7). 을 보 라
반 환 값
보 내 진 문 자 의 수 를 반 환 하 거 나 에 러 발 생 시 −1을 반 환 한 다 .
에 러
이 것 은 소 켓 레 이 어 에 의 해 발 생 되 는 몇 몇 표 준 적 인 에 러 다 . 추 가 적 인 에 러 는 기 초 프 로 토 콜 모 듈 로 부 터 발 생 되 거 나 반 환 된 다 ; 각 각 의 매 뉴 얼 을 참 조 하 라 .
EBADF |
실 제 하 지 않 는 descriptor가 지 정 되 었 다 . |
ENOTSOCK
독 립 변 수 s 가 소 켓 이 아 니 다 .
EFAULT |
실 제 하 지 않 는 사 용 자 공 간 주 소 가 매 개 변 수 로 지 정 되 었 다 . |
EMSGSIZE
소 켓 이 메 시 지 를 자 동 으 로 보 내 줄 것 을 요 청 했 지 만 , 보 내 진 메 시 지 의 크 기 가 이 것 을 불 가 능 하 게 하 였 다 .
EAGAIN혹 은 EWOULDBLOCK
소 켓 이 non-blocking을 표 시 하 였 고 , 요 구 된 operation이 깨 졌 다 .
ENOBUFS
네 트 웍 인 터 페 이 스 를 위 한 출 력 큐 가 가 득 찼 다 . 이 것 은 일 반 적 으 로 인 터 페 이 스 가 전 송 을 멈 추 는 것 으 로 나 타 난 다 . 하 지 만 이 것 은 순 간 적 인 정 체 로 인 한 것 이 다 . (이 것 은 리 눅 스 에 서 는 일 어 날 수 없 다 . 장 치 큐 가 넘 칠 때 패 킷 은 조 용 히 중 단 된 다 .)
EINTR |
신 호 가 발 생 했 다 . | ||
ENOMEM |
사 용 가 능 한 메 모 리 가 없 다 . | ||
EINVAL |
실 제 사 용 되 지 않 는 독 립 변 수 가 통 과 했 다 . | ||
EPIPE |
소 켓 으 로 부 터 의 연 결 에 서 로 컬 앤 드 가 꺼 졌 다 . MSG_NOSIGNAL 이 설 정 되 어 있 지 않 을 경 우 , 프 로 세 스 역 시 SIGPIPE 를 받 는 다 . |
호 환
4.4BSD, SVr4, POSIX 1003.1g draft (이 함 수 는 4.2BSD에 있 다 ).
주 의
위 에 서 주 어 진 초 기 치 는 Single Unix Specification을 따 른 다 , glibc2와 마 찬 가 지 이 다 : flags 독 립 변 수 는 BSD 4.*에 서 ’int’이 다 . 하 지 만 , libc4와 libc5에 선 ’unsigned int’이 다 ; len 독 립 변 수 는 BSD 4.*과 libc4에 서 ’int’이 다 . 하 지 만 libc5에 선 ’size_t’이 다 ; tolen 독 립 변 수 는 BSD 4.*과 libc4, libc5에 서 ’int’이 다 . accept(2). 도 참 조 하 라 .
관 련 항 목
fcntl(2), recv(2), select(2), getsockopt(2), sendfile(2), socket(2), write(2), socket(7), ip(7), tcp(7), udp(7)
역 자
ASPLINUX<man [AT] asp-linux.kr>, 2000년 8월 1일