⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soctcp.c

📁 一个ftp服务器程序
💻 C
字号:
#include "ftpdaemon.h"int socket_stat( int sock, int tmval ){    fd_set readmask;    struct timeval tv, *ptv = NULL;    int bytes=0;    FD_ZERO( &readmask );    FD_SET( sock, &readmask );    memset( &tv, 0, sizeof(struct timeval) );    if ( tmval >= 0 ) {        tv.tv_sec	= tmval;        ptv		= &tv;    }#ifdef SCO5    switch ( select(sock+1, (fd_set*)&readmask, (fd_set*)0, (fd_set*)0, ptv) ) {#else    switch ( select(sock+1, (int*)&readmask, (int*)0, (int*)0, ptv) ) {#endif        case 0: /* socket normal */            return SS_TIMEDOUT;        case -1: /* socket abnormal */	    FTPLOG("select() return -1");            return SS_BAD;        default: /* socket has event occur */            if ( ioctl(sock, FIONREAD, &bytes) < 0 ) {                return SS_BAD;            }            else                if ( bytes < 0 ) {                    return SS_CLOSED;                }                else                    return SS_READABLE;    }}int send_nbytes( int sock, char *buf, int len ){    int left=len, cnt, sended=0;    while ( left > 0 )        switch ( socket_stat(sock, 0) ) {            case SS_TIMEDOUT:            case SS_READABLE:                if ( (cnt=send(sock, buf+sended, left, 0)) <= 0 ) {		    FTPLOG("[%s:%d] send() error",CurrFILE, CurrLINE);                    return E_FAIL;                }                left   -= cnt;                sended += cnt;                break;            case SS_BAD:            case SS_CLOSED:                return E_FAIL;        }    return E_SUCC;}int recv_nbytes( int sock, char *buf, int len, int tmot ){    int left=len, cnt, readed=0;    while ( left > 0 )        switch ( socket_stat(sock, tmot) ) {            case SS_READABLE:                if ( (cnt=recv(sock, buf+readed, left, 0)) <= 0 ) {		    FTPLOG("[%s:%d] recv() fail",CurrFILE, CurrLINE);                    return E_FAIL;                }                left   -= cnt;                readed += cnt;                break;            case SS_TIMEDOUT:            case SS_BAD:            case SS_CLOSED:                return E_FAIL;        }    return E_SUCC;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -