Changeset 5223:3326fb359ffe in roaraudio for libroar/vio_ops.c
- Timestamp:
- 11/12/11 12:44:52 (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/vio_ops.c
r4876 r5223 38 38 #define ROAR_VIO_COPY_BUFSIZE 1024 39 39 40 #define BUFMAX 65536 41 42 #ifdef ROAR_HAVE_IO_POSIX 43 #define _CAN_OPERATE 44 #endif 45 46 #ifdef _CAN_OPERATE 47 static inline ssize_t _send_file_raw (int out, int in) { 48 ssize_t r = 0; 49 #ifdef ROAR_HAVE_LINUX_SENDFILE 50 ssize_t ret; 51 #endif 52 #if defined(__linux__) && defined(ROAR_HAVE_IPV4) 53 int cork_new = 1, cork_old; 54 socklen_t cork_len = sizeof(int); 55 56 if ( getsockopt(out, IPPROTO_TCP, TCP_CORK, &cork_old, &cork_len) == -1 ) { 57 cork_old = -1; 58 } else { 59 setsockopt(out, IPPROTO_TCP, TCP_CORK, &cork_new, sizeof(int)); 60 } 61 #endif 62 63 roar_debug_warn_obsolete("roar_file_send_raw", "roar_vio_copy_data", NULL); 64 65 #ifdef ROAR_HAVE_LINUX_SENDFILE 66 while ((ret = sendfile(out, in, NULL, BUFMAX)) > 0) 67 r += ret; 68 #endif 69 70 // TODO: try mmap here! 71 72 #if defined(__linux__) && defined(ROAR_HAVE_IPV4) 73 if ( cork_old != -1 ) 74 setsockopt(out, IPPROTO_TCP, TCP_CORK, &cork_old, cork_len); 75 #endif 76 return r; 77 } 78 #endif 79 80 40 81 ssize_t roar_vio_copy_data (struct roar_vio_calls * out, struct roar_vio_calls * in) { 41 82 char buf[ROAR_VIO_COPY_BUFSIZE]; 42 83 ssize_t len; 43 84 ssize_t done = 0; 85 #ifdef _CAN_OPERATE 86 int in_fh, out_fh; 87 #endif 44 88 45 89 ROAR_DBG("roar_vio_copy_data(out=%p, in=%p) = ?", out, in); … … 49 93 return -1; 50 94 } 95 96 #ifdef _CAN_OPERATE 97 if ( roar_vio_ctl(in, ROAR_VIO_CTL_GET_READ_FH, &in_fh) == 0 ) 98 if ( roar_vio_ctl(out, ROAR_VIO_CTL_GET_WRITE_FH, &out_fh) == 0 ) 99 _send_file_raw(out_fh, in_fh); 100 #endif 51 101 52 102 roar_err_clear_all();
Note: See TracChangeset
for help on using the changeset viewer.