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이네요.. 즉 에러라는 거죠
혹시 에러의 원인을 아시는 분께서는 답변좀 부탁드리겠습니다.
sendfile()은 스트림 소켓에만 동작합니다. 즉 TCP 만 된다는
sendfile()은 스트림 소켓에만 동작합니다. 즉 TCP 만 된다는 거죠...
--
익스펙토 페트로눔
엇.. 그런가요?
혹시 커널 버전에 의존적이진 않나요?
저는 2.4쓰고 있지만서두, 2.6에서는 된다고 들은거 같은데...
좀더 자세한 답변 부탁드립니다.
댓글 달기