📄 socket.cxx
字号:
if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); ret = ops->getname( fp, sa, len, 0 ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); SOCKET_RETURN(ret);}// -------------------------------------------------------------------------__externC int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen){ SOCKET_ENTRY(); int ret = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); ret = ops->getsockopt( fp, level, optname, optval, optlen ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); SOCKET_RETURN(ret);}// -------------------------------------------------------------------------__externC int listen (int s, int len){ SOCKET_ENTRY(); int ret = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); ret = ops->listen( fp, len ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); SOCKET_RETURN(ret);}// -------------------------------------------------------------------------__externC ssize_t recvmsg (int s, struct msghdr *msg, int flags){ SOCKET_ENTRY(); ssize_t ret = 0; int error = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); msg->msg_flags = flags; error = ops->recvmsg( fp, msg, NULL, &ret ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); if( error != ENOERR ) SOCKET_RETURN(error); SOCKET_RETURN_VALUE( ret );}// -------------------------------------------------------------------------__externC ssize_t recvfrom (int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen){ SOCKET_ENTRY(); struct msghdr msg; struct iovec iov; ssize_t ret = 0; int error = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; // Set up a message header... msg.msg_name = (caddr_t)from; msg.msg_namelen = fromlen ? *fromlen : 0; msg.msg_iov = &iov; msg.msg_iovlen = 1; iov.iov_base = buf; iov.iov_len = len; msg.msg_control = 0; msg.msg_flags = flags; LOCK_SOCKET( fp ); error = ops->recvmsg( fp, &msg, fromlen, &ret ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); if( error != ENOERR ) SOCKET_RETURN(error); SOCKET_RETURN_VALUE( ret );}// -------------------------------------------------------------------------__externC ssize_t recv (int s, void *buf, size_t len, int flags){ return recvfrom( s, buf, len, flags, NULL, NULL );}// -------------------------------------------------------------------------__externC ssize_t sendmsg (int s, const struct msghdr *msg, int flags){ SOCKET_ENTRY(); ssize_t ret = 0; int error = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); error = ops->sendmsg( fp, msg, flags, &ret ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); if( error != ENOERR ) SOCKET_RETURN(error); SOCKET_RETURN_VALUE( ret );}// -------------------------------------------------------------------------__externC ssize_t sendto (int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen){ SOCKET_ENTRY(); ssize_t ret = 0; int error = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; struct msghdr msg; struct iovec iov; msg.msg_name = (caddr_t)to; msg.msg_namelen = tolen; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_control = 0; msg.msg_flags = 0; iov.iov_base = (char *)buf; iov.iov_len = len; LOCK_SOCKET( fp ); error = ops->sendmsg( fp, &msg, flags, &ret ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); if( error != ENOERR ) SOCKET_RETURN(error); SOCKET_RETURN_VALUE( ret ); }// -------------------------------------------------------------------------__externC ssize_t send (int s, const void *buf, size_t len, int flags){ return sendto( s, buf, len, flags, NULL, 0 );}// -------------------------------------------------------------------------__externC int setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen){ SOCKET_ENTRY(); int ret = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); ret = ops->setsockopt( fp, level, optname, optval, optlen ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); SOCKET_RETURN(ret);}// -------------------------------------------------------------------------__externC int shutdown (int s, int how){ SOCKET_ENTRY(); int ret = 0; cyg_file *fp; fp = cyg_fp_get( s ); if( fp == NULL ) FILEIO_RETURN(EBADF); if( fp->f_type == CYG_FILE_TYPE_SOCKET ) { cyg_sock_ops *ops = (cyg_sock_ops *)fp->f_xops; LOCK_SOCKET( fp ); ret = ops->shutdown( fp, how ); UNLOCK_SOCKET( fp ); } cyg_fp_free( fp ); SOCKET_RETURN(ret);}//==========================================================================// Locking protocolstatic void cyg_ns_lock( cyg_nstab_entry *ns ){ if( ns->syncmode & CYG_SYNCMODE_SOCK_NETSTACK ) { nstab_lock[ns-&cyg_nstab[0]].lock(); }}static void cyg_ns_unlock( cyg_nstab_entry *ns ){ if( ns->syncmode & CYG_SYNCMODE_SOCK_NETSTACK ) { nstab_lock[ns-&cyg_nstab[0]].unlock(); }}static void cyg_sock_lock( cyg_file *fp ){ cyg_nstab_entry *ns = (cyg_nstab_entry *)fp->f_mte; if( fp->f_syncmode & CYG_SYNCMODE_SOCK_NETSTACK ) nstab_lock[ns-&cyg_nstab[0]].lock(); cyg_file_lock( fp, fp->f_syncmode>>CYG_SYNCMODE_SOCK_SHIFT);}static void cyg_sock_unlock( cyg_file *fp ){ cyg_nstab_entry *ns = (cyg_nstab_entry *)fp->f_mte; if( fp->f_syncmode & CYG_SYNCMODE_SOCK_NETSTACK ) nstab_lock[ns-&cyg_nstab[0]].unlock(); cyg_file_unlock( fp, fp->f_syncmode>>CYG_SYNCMODE_SOCK_SHIFT);}// -------------------------------------------------------------------------// EOF socket.cxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -