Changeset 753:cb79175b94f9 in roaraudio for libroar
- Timestamp:
- 09/05/08 03:55:23 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/socket.c
r752 r753 211 211 } 212 212 213 214 #define _SCMR_CONTROLLEN (sizeof(struct cmsghdr) + sizeof(int)) 215 int roar_socket_send_fh (int sock, int fh, char * mes, size_t len) { 216 struct iovec iov[1]; 217 struct msghdr msg; 218 char cmptr_buf[_SCMR_CONTROLLEN]; 219 struct cmsghdr * cmptr = (struct cmsghdr *) cmptr_buf; 220 221 if ( sock < 0 || fh < 0 || len == 0 ) 222 return -1; 223 224 iov[0].iov_base = mes; 225 iov[0].iov_len = len; 226 msg.msg_iov = iov; 227 msg.msg_iovlen = 1; 228 msg.msg_name = NULL; 229 msg.msg_namelen = 0; 230 231 cmptr->cmsg_level = SOL_SOCKET; 232 cmptr->cmsg_type = SCM_RIGHTS; 233 cmptr->cmsg_len = _SCMR_CONTROLLEN; 234 msg.msg_control = (caddr_t) cmptr; 235 msg.msg_controllen = _SCMR_CONTROLLEN; 236 *(int *)CMSG_DATA(cmptr) = fh; 237 238 return sendmsg(sock, &msg, 0); 239 } 240 241 int roar_socket_recv_fh (int sock, char * mes, size_t * len) { 242 struct iovec iov[1]; 243 struct msghdr msg; 244 char cmptr_buf[_SCMR_CONTROLLEN]; 245 struct cmsghdr * cmptr = (struct cmsghdr *) cmptr_buf; 246 247 if ( sock < 0 ) 248 return -1; 249 250 iov[0].iov_base = mes; 251 iov[0].iov_len = *len; 252 msg.msg_iov = iov; 253 msg.msg_iovlen = 1; 254 msg.msg_name = NULL; 255 msg.msg_namelen = 0; 256 257 msg.msg_control = (caddr_t) cmptr; 258 msg.msg_controllen = _SCMR_CONTROLLEN; 259 260 if ( (*len = recvmsg(sock, &msg, 0)) == -1 ) 261 return -1; 262 263 if ( msg.msg_controllen != _SCMR_CONTROLLEN ) 264 return -1; 265 266 return *(int *)CMSG_DATA(cmptr); 267 } 268 213 269 int roar_socket_listen (int type, char * host, int port) { 214 270 return roar_socket_open(MODE_LISTEN, type, host, port);
Note: See TracChangeset
for help on using the changeset viewer.