QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 642|回复: 4

问有关sock编程的问题

[复制链接]
发表于 2003-4-12 21:50:55 | 显示全部楼层 |阅读模式
这个小程序,怎么才会结束?read时在什么时候结束的?

/* ftp.c - ftp , main */

#include <unistd.h>
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

extern int        errno;

int        TCPftp(const char *host, const char *service);
int        errexit(const char *format, ...);
int        connectTCP(const char *host, const char *service);

#define        LINELEN                128
#define MSG  "anonymous"

/*------------------------------------------------------------------------
* main - TCP client for DAYTIME service
*------------------------------------------------------------------------
*/
int
main(int argc, char *argv[])
{
        char        *host = "localhost";        /* host to use if none supplied        */
        char        *service = "daytime";        /* default service port                */

        switch (argc) {
        case 1:
                host = "localhost";
                break;
        case 3:
                service = argv[2];
                /* FALL THROUGH */
        case 2:
                host = argv[1];
                break;
        default:
                fprintf(stderr, "usage: TCPdaytime [host [port]]\n");
                exit(1);
        }
        TCPftp(host, service);
        exit(0);
}

/*------------------------------------------------------------------------
* TCPftp - invoke ftp on specified host and print results
*------------------------------------------------------------------------
*/
int
TCPftp(const char *host, const char *service)
{
        char        buf[LINELEN+1];                /* buffer for one line of text        */
        int        s, n;                        /* socket, read count                */

        s = connectTCP(host, service);

        while( (n = read(s, buf, LINELEN)) &gt; 0) {
                buf[n] = '\0';                /* ensure null-terminated        */
                (void) fputs( buf, stdout );
        }
        /*  write(s,MSG,strlen(MSG));        
        while( (n = read(s, buf, LINELEN)) &gt; 0) {
                buf[n] = '\0';               
                (void) fputs( buf, stdout );
        }*/
        return 0;
}

/*------------------------------------------------------------------------
* connectTCP - connect to a specified TCP service on a specified host
*------------------------------------------------------------------------
*/
int
connectTCP(const char *host, const char *service )
/*
* Arguments:
*      host    - name of host to which connection is desired
*      service - service associated with the desired port
*/
{
        return connectsock( host, service, "tcp");
}
发表于 2003-4-13 02:24:37 | 显示全部楼层
it ends when read in tcpftp() return &lt;=0.
u connect to a hostx, when that hostx crash or close the socket. u read will return 0, then u code ends.
回复

使用道具 举报

 楼主| 发表于 2003-4-13 12:47:26 | 显示全部楼层
When it reads from the connection(for example,a ftp server),it can not return from the while loop!
回复

使用道具 举报

发表于 2003-4-13 19:00:38 | 显示全部楼层
不太明白你的意思 不过你确实总是会在tcpread中读取数据或者阻塞 知道你想断开连接 如果你想反映应用层的东西你需要分析读到的东西和什么时候需要读
回复

使用道具 举报

发表于 2003-4-13 23:10:31 | 显示全部楼层
[quote:adefe48efc="skyhit518"]When it reads from the connection(for example,a ftp server),it can not return from the while loop![/quote]

no, it can return, read will be blocked there when nothing to read. but read will return if there are sth read or connection is closed or some errors occur.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 06:04 , Processed in 0.045732 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表