(Linux) send & recv
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);
// 성공시 전송된 바이트 수, 실패시 -1 반환
// sockfd 데이터 전송 대상과의 연결을 의미 하는 소켓의 파일 디스크립터 전달
// buf 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달
// nbytes 전송할 바이트 수 전달
// flags 데이터 전송시 적용할 다양한 옵선 정보 전달
#include <sys/socket.h>
ssize_t recv(int sockfd , void *buf, size_t nbytes, int flags);
// 성공시 수신한 바이트 수(단 EOF 전송시 0), 실패시 -1 반환
// sockfd 데이터 수신 대상과의 연결을 의 미하는 소켓의 따일 디스크립 터 전달
// buf 수신된 데이터를 저장할 버퍼의 주소값 전달
// nbytes 수신할 수 있는 최대 바이트 수 전달
// flags 데이터 수신시 적용할 다앙한 옵션 정보 전달
MSG 008: 긴급 메시지의 전송
추가
입력버퍼 검사
추가
readv & writev
데이터를 모아서 전송하고, 모아서 수신하는 기능의 함수
#include <sys/uio.h>
ssize_t writev(int filedes, const struct iovec *iov, int iovcnt);
// 성공시 전송된 바이트 수, 실패시 -1 반환
// filedes 데이터 전송의 목적지를 나타내는 소켓의 파일 디스크립터 전달
// 단 소켓에만 제한된 함수가 아니기 때문에, read 함수처럼 파일이나 콘솔 대상의 파일 디스크립터도 전달 가능
// IOV 구조체 lovec 배열의 주소 값 전달, 구조체 lovec의 변수에는 전송할 데이터의 위치 및 크기 정보가 담긴다.
// iovcnt 두 번째 인댐 전달된 주소 값01 가리키는 배열의 길이정보 전달
struct iovec
{
void * iov_base; // 벼퍼의 주소 정보
size_ t iov _len; // 버퍼의 크기 정보
}
#include <stdio.h>
#include <sys/uio.h>
int main(int argc, char *argv[])
{
struct iovec vec[2];
char buf1[]="ABCDEFG";
char buf2[]="1234567";
int str_len;
vec[0].iov_base=buf1;
vec[0].iov_len=3;
vec[1].iov_base=buf2;
vec[1].iov_len=4;
str_len=writev(1, vec, 2);
puts("");
printf("Write bytes: %d \n", str_len);
return 0;
}
#include <sys/uio.h>
ssize_t readv(int filedes, const struct iovec *iov , int iovcnt);
// 성공시 수신된 바이트 수, 실패시 -1 반환
// filedes 데이터를 수신할 파일(혹은 소켓)의 파일 디스크립터를 민자로 전달
// iov 데이터를 저장할 위치와 크기 정보를 담고 있는 iovec 구조체 배열의 주소 값 전달
// iovcnt 두 번째 인자로 전달된 주소 값이 가리키는 배열의 길이정보 전달
#include <stdio.h>
#include <sys/uio.h>
#define BUF_SIZE 100
int main(int argc, char *argv[])
{
struct iovec vec[2];
char buf1[BUF_SIZE]={0,};
char buf2[BUF_SIZE]={0,};
int str_len;
vec[0].iov_base=buf1;
vec[0].iov_len=5;
vec[1].iov_base=buf2;
vec[1].iov_len=BUF_SIZE;
str_len=readv(0, vec, 2);
printf("Read bytes: %d \n", str_len);
printf("First message: %s \n", buf1);
printf("Second message: %s \n", buf2);
return 0;
}