我们知道在建立socket连接的时候,可以disable nagle.但是由于我只是调用一个api函数的接口建立socket连接,这个api负责建立连接,连接过程不可见。这个api turn on the nagle. 有什么办法我可以 turn it off 呢?
我出100分。很急,希望大家能给我答案。

解决方案 »

  1.   

    BOOL val=TRUE;
    setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&val, sizeof(val));
      

  2.   

    bool b= true;int setsockopt(
      s,
      IPPROTO_TCP,
      TCP_NODELAY,
      (const char*)&b,
      sizeof(b)
    );
      

  3.   

    这条指令只有自己建立socket的时候才可以用,我无法传输socket指令。是不是有一个socket identifier number 我可以取到然后再对操作系统发出指令?
      

  4.   

    补充一下:我调用一个api函数建立socket连接,而且我必要使用这个api函数。但是api只提供接口,不存在任何参数输入。我无权对socket传输指令。我想把nagle关掉怎么办?
      

  5.   

    再补充一下:或者说在Nagle turn on 的情况下,怎么样才能让小数据包没有等待直接发出?
      

  6.   

    学习,用过socket,但没这样用过,收藏了,等着某个高手的答案
      

  7.   

    Writer(执着的灵魂) 的写法应该有问题,因为 true 被定义为 -1 所以你的代码执行后不会有什么效果的或者采用 DentistryDoctor(不在无聊中无奈,就在沉默中变态)  的写法或者修改为 int b= 1;int setsockopt(
    s,
    IPPROTO_TCP,
    TCP_NODELAY,
    (const char*)&b,
    sizeof(b)
    );
      

  8.   

    你们应该先看清楚我的问题啊,我不能写socket语句的,就不要再setsockopt了。如果只是这么简单的一条语句解决,就不会问了。
      

  9.   

    是由于我只是调用一个api函数的接口建立socket连接***************************************************不好意思啊,我是没看懂你说的,你调用的api是别人写好的吗? 他没有给你返回套接字或者提供获得套接字的方法吗?
      

  10.   

    不好意思啊,我是没看懂你说的,你吗? 他没有给你返回套接字或者提供获得套接字的方法吗?
    --------------------------------------------
    你说得很对,我是调用是别人写好的api,没有任何的返回值。其实他是不想让我turn off nagle.
      

  11.   

    如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。
      

  12.   

    如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。
    --------------------------------------------
    谢谢你,这正是我想要得方法,我有一个api.h文件和一个.dll文件,您能给我个具体的例子吗?
      

  13.   

    ProgrameMan,我不想现在结贴,我希望其他人还会给我一些反编译的信息,谢谢,分数一定加上。
      

  14.   

    如果反编译vc++的dll用哪个软件好一点?
      

  15.   

    如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。
    --------------------------------------------
    你能告诉我我找到socket的内存,怎么做setsocket操作吗?我汇编不是很熟悉。
      

  16.   

    找到内存就等于找到了套接字啊,例如:你确定api库创建套接字后把它保存在了一个变量中,这个变量的内存地址为 0x007f1234
    那么,你要做的就是 SOCKET s = (SOCKET)Ox007f1234 就行
    setsocket(s,....)反编译VC++的dll用哪个软件好一点?
    呵呵 我刚学汇编也不是很熟,用MASM32应该可以吧
      

  17.   

    你直接用API HOOK钩住connect函数,在自己函数里调用完connect后在setsockopt
      

  18.   

    如果楼主在进行网络通讯时,都是调用别人提供的DLL进行,从兼容性等考虑那么楼上方法
    应该比较可行的。不知道楼主对HOOK API怎么样?
      

  19.   

    HOOK setsockopt
    判断其选项和值,再进行相应的处理.
      

  20.   

    ProgrameMan(我要学汇编) ,you still give me a lot of help. Thanks a lot.and thanks everybody!