关于socket nagle算法的问题 我们知道在建立socket连接的时候,可以disable nagle.但是由于我只是调用一个api函数的接口建立socket连接,这个api负责建立连接,连接过程不可见。这个api turn on the nagle. 有什么办法我可以 turn it off 呢?我出100分。很急,希望大家能给我答案。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL val=TRUE;setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&val, sizeof(val)); bool b= true;int setsockopt( s, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b)); 这条指令只有自己建立socket的时候才可以用,我无法传输socket指令。是不是有一个socket identifier number 我可以取到然后再对操作系统发出指令? 补充一下:我调用一个api函数建立socket连接,而且我必要使用这个api函数。但是api只提供接口,不存在任何参数输入。我无权对socket传输指令。我想把nagle关掉怎么办? 再补充一下:或者说在Nagle turn on 的情况下,怎么样才能让小数据包没有等待直接发出? 学习,用过socket,但没这样用过,收藏了,等着某个高手的答案 Writer(执着的灵魂) 的写法应该有问题,因为 true 被定义为 -1 所以你的代码执行后不会有什么效果的或者采用 DentistryDoctor(不在无聊中无奈,就在沉默中变态) 的写法或者修改为 int b= 1;int setsockopt(s,IPPROTO_TCP,TCP_NODELAY,(const char*)&b,sizeof(b)); 你们应该先看清楚我的问题啊,我不能写socket语句的,就不要再setsockopt了。如果只是这么简单的一条语句解决,就不会问了。 是由于我只是调用一个api函数的接口建立socket连接***************************************************不好意思啊,我是没看懂你说的,你调用的api是别人写好的吗? 他没有给你返回套接字或者提供获得套接字的方法吗? 不好意思啊,我是没看懂你说的,你吗? 他没有给你返回套接字或者提供获得套接字的方法吗?--------------------------------------------你说得很对,我是调用是别人写好的api,没有任何的返回值。其实他是不想让我turn off nagle. 如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。 如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。--------------------------------------------谢谢你,这正是我想要得方法,我有一个api.h文件和一个.dll文件,您能给我个具体的例子吗? ProgrameMan,我不想现在结贴,我希望其他人还会给我一些反编译的信息,谢谢,分数一定加上。 如果反编译vc++的dll用哪个软件好一点? 如果他没有给你提供机会得到套接字句柄,我想你只能通过非常规的手段来获取套接字了,例如反汇编他的库,然后找到保存套接字的内存(因为它是以api的形式提供,所以你俩应该都在一个进程中),最后在作 setsockopt。--------------------------------------------你能告诉我我找到socket的内存,怎么做setsocket操作吗?我汇编不是很熟悉。 找到内存就等于找到了套接字啊,例如:你确定api库创建套接字后把它保存在了一个变量中,这个变量的内存地址为 0x007f1234那么,你要做的就是 SOCKET s = (SOCKET)Ox007f1234 就行setsocket(s,....)反编译VC++的dll用哪个软件好一点?呵呵 我刚学汇编也不是很熟,用MASM32应该可以吧 你直接用API HOOK钩住connect函数,在自己函数里调用完connect后在setsockopt 如果楼主在进行网络通讯时,都是调用别人提供的DLL进行,从兼容性等考虑那么楼上方法应该比较可行的。不知道楼主对HOOK API怎么样? HOOK setsockopt判断其选项和值,再进行相应的处理. ProgrameMan(我要学汇编) ,you still give me a lot of help. Thanks a lot.and thanks everybody! 求助 任务栏图标 隐藏及恢复显示的问题,谢谢大家! 实现类似windows资源管理器窗口左侧的信息窗口 常用字符串函数,希望对常问这些问题的人有用 请问如何选择性的让自己加入的菜单条中的菜单项有效啊 在线程函数中获取主窗口DC的问题 我用CFileDialog dlg 是怎么没有弹出对话框,是不是参数没给对。该怎么给啊 ListCtrl如何Select All? Progress数据库的ODBC驱动程序哪儿有啊 这段代码为什么会出现这样郁闷的效果? 问各位大哥个问题(钩子),哪个用什么办法改变键盘响应呢? 简单程序调试时出错? 在函数前面的GLOBAL(void)是什么意思?
setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&val, sizeof(val));
s,
IPPROTO_TCP,
TCP_NODELAY,
(const char*)&b,
sizeof(b)
);
s,
IPPROTO_TCP,
TCP_NODELAY,
(const char*)&b,
sizeof(b)
);
--------------------------------------------
你说得很对,我是调用是别人写好的api,没有任何的返回值。其实他是不想让我turn off nagle.
--------------------------------------------
谢谢你,这正是我想要得方法,我有一个api.h文件和一个.dll文件,您能给我个具体的例子吗?
--------------------------------------------
你能告诉我我找到socket的内存,怎么做setsocket操作吗?我汇编不是很熟悉。
那么,你要做的就是 SOCKET s = (SOCKET)Ox007f1234 就行
setsocket(s,....)反编译VC++的dll用哪个软件好一点?
呵呵 我刚学汇编也不是很熟,用MASM32应该可以吧
应该比较可行的。不知道楼主对HOOK API怎么样?
判断其选项和值,再进行相应的处理.