第二个参数是 客户端的ip和端口信息吧。
这个参数是怎么来的?  从哪里取得?还有为什么struct sockaddr FAR *addr 不是 const?
那个FAR是什么意思?

解决方案 »

  1.   

    accept(SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen)中的参数说明:
    s:是帧听Socket也就是执行listen的socket
    addr是连接上来的客户端的地址信息,包括IP和端口
    addrlen是长度
    函数本身返回一个与客户端连接的Server socket.
      

  2.   

    struct sockaddr FAR *addr 
    1、是一个输出的参数,也就是说执行了accept以后addr中就有了相关信息(2楼说的很清楚)。这个要在你使用之前定义。
    2、这里的FAR 表示远指针(近指针、远指针、巨指针是段寻址的16bit处理器的产物)在32位系统下一般不作区分。近指针16位,远指针32位。
      

  3.   

    NOD! 第二个参数是值-结果参数,即由内核填充的关于客户端的地址和端口信息的参数
      

  4.   

    用代码说明比较方便
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    listen(s, 5);
    SOCK_ADDRIN addrClient;
    int nLen = sizeof(SOCK_ADDRIN);
    accept(s, (SOCKADDR*)&addrClient, &nLen);其中,addrClient保存了本次连接到程序的ip和port,nLen保存了本次连接到程序的地址结构的大小
      

  5.   

    是接收到的socket的远端地址,是输出参数,不可能是const的
      

  6.   

    关于FAR,你可以右键点击,选择Go To Definition of FAR,我们可以看到#define FAR                 far
    再右键点击far,选择Go To Definition of far,我们可以看到
    #undef far
    #undef near
    #undef pascal#define far
    #define near
    #define far后面是空白的,也就是说,系统编译的时候,把FAR替换成空白,也就是跟没写一样,呵呵关于far,涉及到汇编语言的一些知识。早期的dos编程模式中使用的内存分段模式,函数名字代表的是函数的入口地址,所以这个地址寻址在编译的时间可以决定是代码段内near跳转还是段间far跳转,现在windows程序都使用平坦内存模式,就不存在近跳转和远跳转了.