UDP socket을 인수로 넣어서 sendfile 써보신 분 있나요?

너부리의 이미지

제가 실험용으로 다음과 같이 UDP+sendfile하는 코드를 작성하였습니다.

#include <stdio.h>
#include <fcntl.h>
#include <sys/sendfile.h>

#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define SA struct sockaddr

int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in servaddr;
int fd, offset, ret, i;

socklen_t len;

offset = 0;

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(7777);
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

fd = open( argv[2], O_RDONLY);

ret = sendfile( sockfd, fd, &offset, 16777200);

printf("ret:%d, offset:%d\n", ret, offset);
close(sockfd);
close(fd);

return 0;
}

이걸 컴파일한후

./a.out 보낼IP 파일이름

이렇게 하니까 return값이 -1이네요.. 즉 에러라는 거죠

혹시 에러의 원인을 아시는 분께서는 답변좀 부탁드리겠습니다.

cjh의 이미지

sendfile()은 스트림 소켓에만 동작합니다. 즉 TCP 만 된다는 거죠...

--
익스펙토 페트로눔

너부리의 이미지

혹시 커널 버전에 의존적이진 않나요?

저는 2.4쓰고 있지만서두, 2.6에서는 된다고 들은거 같은데...

좀더 자세한 답변 부탁드립니다.