2010年1月20日星期三

ubuntu快捷键

1.关于终端的快捷键:

Tab:tab键是比较常用的一个快捷键,它的作用是补全文件名或者路径。举例来说,输入"cd
/ho"在按一下tab键,终端里就会显示"cd
/home"了。如果您的文件夹下,有两个名字开头部分相同的文件,比如有"picture001.bmp"和"picture002.bmp"两个文
件,输入"rm pic"以后按下tab键,就会补全成"rm
picture",您可以接着输入剩下的名字。使用tab键补全还支持对于扩展名的识别,比如您的文件夹下有"TH2AD_CHS.exe文件和
TH2AD_CHS.ini文件,当您输入"wine TH"再按下tab后,会补全成"wine
TH2AD_CHS.exe"而不会补全.ini文件,因为wine和.exe文件是关联的。

Ctrl+C:这个键可不是用来复制的,在中端下,按下Ctrl+C就代表结速当前终端执行的程序,按下的时候一定要慎重。

Ctrl+A:将光标移动到命令行的开始处。

Ctrl+E:将光标移动到命行令的结尾处。

Ctrl+U:删除行首到光标出的字符。

Ctrl+Z:把当前进程送到后台处理。

Ctrl+Alt+F1:切换到第一个文本终端。在Linux下你可以有多达六个不同的终端。

Ctrl+Alt+F7:切换到第一个图形用户界面(一般来说X-window在第七个终端)。

~:~好像不能算一个快捷键吧?~的作用是代替您的主文件夹,比如您的用户名是user,那么
"/home/user/桌面" 和 "~/桌面" 是等价的。

2.Gnome下的快捷键:

Alt + F1:类似Windows下的Win键,在GNOME中打开"应用程序"菜单(Applications)
(在KDE下同样适用。)

Alt + F2:类似Windows下的Win + R组合键,在GNOME中运行应用程序

Ctrl + Alt + D:类似Windows下的Win + D组合键,显示桌面。

Ctrl + Alt + L:锁定桌面并启动屏幕保护程序,取消锁定时需要输入密码。
(在KDE下有效。)

Alt + Tab:同Windows下的Alt + Tab组合键,在不同程序窗口间切换。

PrintScreen:全屏抓图,由于这个功能的反应有点慢,请不要反复按这个键,否则可能会死机。

Alt + PrintScreen:当前窗口抓图,弹出抓图对话框。
(在KDE下会将图片报存到剪贴板中。)

Ctrl + Alt + → / ←:在不同工作台间切换。
(在KDE下使用 Ctrl+Tab 键完成这个功能。)

Ctrl + Alt + Shift + → / ←:移动当前窗口到不同工作台

Ctrl+Alt+Shift+Fn:终端N或模拟终端N(n和N为数字1-6)

Ctrl+Alt+F7:返回桌面,如果您用 Ctrl+Alt+F1

Alt + F4:关闭窗口

Alt + F5:取消最大化窗口 (恢复窗口原来的大小)

Alt + F7:移动窗口 (注: 在窗口最大化的状态下无效)

Alt + F8:改变窗口大小 (注: 在窗口最大化的状态下无效)

Alt + F9:最小化窗口

Alt + F10:最大化窗口

Alt + Space:打开窗口的控制菜单 (点击窗口左上角图标出现的菜单)

单击鼠标滚轮:当您选中一段文字后,按下鼠标滚轮键,可以将选中的文字复制到鼠标所指的位置,在中端中也有效。
(KDE中未测试。)

Atl+单击鼠标拖动:移动窗口的位置。
(在KDE和Compiz中同样有效。)

3.Firefox的快捷键:

Alt+左方向键 或 Backspace:后退。
Shift+Backspace 或 Alt+右方向键:前进。
Alt+Home:首页。(这里指的是用户自定义的首页)
Ctrl+O:打开文件。
F5 或 Ctrl+R:重新载入。
Ctrl+F5 或 Ctrl+Shift+R:重新载入 (忽略缓存)。
Esc:停止。

End:到页面底部。
Home:到页面顶部。
F6 :移到下一帧。
Shift+F6:移到上一帧。
Ctrl+U:页面源代码。
Ctrl+P:打印。
Ctrl+S:页面另存为。
Ctrl+"+":放大文字。
Ctrl+"-":缩小文字。
Ctrl+0:恢复文本大小。

Ctrl+F:本页查找。
F3:再次查找。
':输入查找链接。
/:输入查找文本。
Shift+F3:查找。
Ctrl+K 或 Ctrl+E:网页搜索。

Ctrl+W 或 Ctrl+F4:关闭标签。
Ctrl+Shift+W 或 Alt+F4:关闭窗口。
Ctrl+左方向键 或 Ctrl+上方向键:向左移动标签。
Ctrl+右方向键 或 Ctrl+下方向键:向右移动标签。
Ctrl+Home:移动标签到开头。
Ctrl+End:移动标签到结尾。
Ctrl+T:新建标签页。
Ctrl+N:新建窗口。
Ctrl+Tab 或 Ctrl+PageDown:下一个标签页。
Alt+Enter:在新标签页打开网址。
Ctrl+Shift+Tab 或 Ctrl+PageUp:前一个标签页。
Ctrl+Shift+T:撤销关闭标签页。
[1 到 8]: Ctrl+[1 到 8]:选择标签页。
Ctrl+9:选择最后标签页。

Ctrl+Shift+D:添加所有为书签。
Ctrl+D:添加当前为书签。
Ctrl+B 或 Ctrl+I:打开书签。
F7:插入浏览。
Ctrl+J:下载。
Ctrl+H:历史。
Ctrl+Shift+Del:清除私有数据。

Ctrl+Enter:补全 .com 地址。
Shift+Enter:补全 .net 地址。
Ctrl+Shift+Enter:补全 .org 地址。
Del:删除选定的自匹配输入。
F11:全屏。
Alt+D 或 F6 或 Ctrl+L:选择地址条。
Alt+上方向键 或 Alt+下方向键 或 F4:选择或管理搜索引擎。

Shift+向上滚动滚轮:前进。
Shift+向下滚动滚轮:后退。
在标签上按鼠标中键:关闭标签页。
Ctrl+滚动滚轮:改变页面比例。
在标签页栏双击鼠标:新建标签页。
Ctrl+Left-click 或 点击鼠标中键:在后台打开标签页。
Shift+Ctrl+Left-click 或 Shift+点击鼠标中键:在前台打开标签页。
Shift+Left-click:在新窗口打开。
Shift+Reload button:刷新 (覆盖缓存)。
Alt+Left-click:保存页面为。
Alt+滚轮:逐行滚动。

#####################################
Ubuntu操作基本快捷键
* 打开主菜单 = Alt + F1
* 运行 = Alt + F2
* 显示桌面 = Ctrl + Alt + d
* 最小化当前窗口 = Alt + F9
* 最大化当前窗口 = Alt + F10
* 关闭当前窗口 = Alt + F4
* 截取全屏 = Print Screen
* 截取窗口 = Alt + Print Screen
默认特殊快捷键
* 展示所有窗口程序 = F10
* 展示当前窗口最上层程序 = F11
* 展示当前窗口所有程序 = F12
* 切换窗口 = Alt + Tab
* 旋转3D桌面 = Ctrl + Alt +
左/右箭头(也可以把鼠标放在标题栏或桌面使用滚轮切换)
* 旋转3D桌面( 活动窗口跟随) = Ctrl + Shift + Alt + 左/右箭头
* 手动旋转3D桌面 = Ctrl + Alt + 左键单击并拖拽桌面空白处
* 窗口透明/不透明 = possible with the "transset" utility or Alt + 滚轮
* 放大一次 = 超级键 + 右击
* 手动放大 = 超级键 + 滚轮向上
* 手动缩小 = 超级键 + 滚轮向下
* 移动窗口 = Alt + 左键单击
* 移动窗口时贴住边框 = 左键开始拖动后再 Ctrl + Alt
* 调整窗口大小 = Alt + 中击
* Bring up the window below the top window = Alt + middle-click
* 动态效果减速 = Shift + F10
* 水纹 = 按住 Ctrl+超级键
* 雨点 = Shift-F9
* 桌面展开= Ctrl + Alt + 下箭头,然后按住 Ctrl + Alt 和左/右箭头选择桌面


Alt + Shift+ Up Arrow - 以很酷的方式显示当前窗口
Nautilus

11. Shift+Ctrl+N - 新建文件夹, 很有用

12. Alt + Enter - 查看选择文件/文件夹的属性,代替单击右键选择属性

13. Ctrl + 1/2 - 改变文件夹视图查看方式,图标视图/列表视图

14. Ctrl + W - 关闭当前Nautilus窗口

15. Ctrl + Shift + W - 关闭所有Nautilus窗口

16. Ctrl+T - 在Nautilus中新建一个标签

17. Alt + Up/Down Arrow - 移动到父文件夹/选择的文件夹

18. Alt + Left/Right Arrow - 后退/前进

19. Alt + Home -直接移动到主文件夹

20. F9 - 开关显示Nautilus侧边栏

21. Ctrl + H -开关显示隐藏文件夹

程序中常用的快捷键:
Ctrl+N 新建
Ctrl+X 剪切
Ctrl+C 复制
Ctrl+V 粘贴
Ctrl+Z 撤销
Ctrl+S 保存

Ubuntu Gnome的桌面技巧:
===键盘类===
1.先同时按住 Alt + Ctrl 键,再按键盘上的左 右光标 键 可以切换工作区
2.web时按 "/" 键 等于 查找功能,桌面或者目录时按" /" 等于"打开.."
3.当前目录下快速文件(夹)定位, 直接输入文件(夹)名字
4.shift键 可以对scim的中英输入快速切换,windows下的智能ABC一样
5.alt+左右可以前进后退页面
6.屏幕锁定: Alt+Ctrl+L 等价于Windows中的Win键 + L, ctrl+alt+d
相当于Windows中的Win键 +D
——换句话说,Alt+Ctrl相当于Win键——
7.Ctrl+Alt+Shift+左右方向键,可以把当前窗口移到上一个或下一个桌面
8.Alt+Tab向左切换窗口,Alt+Shift+Tab向友切换窗口

===鼠标类===
1.直接拖拉在最大化时的窗口标题可以还原窗口大小,再拖放回去就最大化
2.在音量控制处用鼠标滚轮滚动可以直接调整音量,在任务栏中滚动滚轮可以切换任务栏,工作区则切换工作区
3.浏览网页的时候直接把图片落到保存目录既可下载
4.按鼠标滚轮即张贴, 同时按下鼠标 左右键等价于按鼠标中键
-->引伸到,在web上选中文字,直接双键(中键)可以张贴选中的文字
5.工作区里的小窗口可以在不同工作区内拖拉,即移动到....(工作区)的功能
6.shift + 鼠标滚轮 可以后退页面
7.鼠标中键点标题栏可以隐藏当前窗口
8.按住shift 拖动窗口可以吸附上下边缘的移动
9.直接将 文件管理器 中的文件拖到 GNOME终端 中就可以在终端中得到完整的路径名
10.修改目录图标:可将文件管理器中的图片直接拖到文件夹属性所在的图标上.
11.鼠标中键直接单击 滚动条 的空白处,屏幕即滚动到那处。
12.中键拖动图片到桌面,可选择设为墙纸


其他

22. Ctrl + Alt + L -锁屏

23. Alt + F1 - 打开应用程序菜单

24. Alt + F2 - 打开运行应用程序对话框

25. Win + 鼠标滚轮 - 放大/缩小屏幕

Ubuntu修改密码的一个问题

有时候使用图形窗口的"用户和组"添加或修改用户密码时,会跳出提示信息:
密码太短
用户密码必须多于 6 个字符,而且最好是由数字、字母和特殊字符组成。
出现这种情况可以使用终端快速修改用户密码
sudo passwd 用户名

2010年1月18日星期一

今日警句

如果在当今的世界你停止学习,这个世界将从你身边飞驰而去。

——查理·芒格

最新unicode 汉字全集打印

=============
一、最新unicode范围

=============

unicode
最新版本是2009年9月出版的5.2版,对汉字又进行了扩充。以往常说的20902个汉字,在unicode中从0x4e00-0x9fa5,但这不是全部的unicode汉字。最新版的unicode汉字块如下:

0x4E00-0x9FFF CJK 统一字型 常用字 共
20992个(实际只定义到0x9FC3)
0x3400-0x4DFF CJK 统一字型扩展表A 少用字 共 6656个
0nx20000-0x2A6DF CJK 统一字型扩展表B 少用字,历史上使用 共42720个
0xF900-0xFAFF CJK 兼容字型 重复字,可统一变体,共同字 共512个
n0x2F800-0x2FA1F CJK 兼容字型补遗 可统一变体 共544个

一共定义大陆,台湾,香港,新加坡,马来西亚汉字,日语和韩语汉字或偏旁部首71424个。某些位置可能还是空的。

unicode 汉字定义可以在http://www.unicode.org/charts/unihan.html
查到。可以直接输入16进制unicode码,也可以直接将汉字复制粘贴进入。


===============

二、打印unicode汉字的方法

===============

不清楚windows对unicode支持情况如何。下面的程序在ubuntu9.10下测试通过,调整范围即可打印整个unicode
Han(unihan)的字符。

view plaincopy to clipboardprint?
#!/bin/env python
#coding:utf8
#2010.1.17
#打印20992个汉字及unicode 16进制到hz.txt
f = open('hz.txt','w+')
i = 0
for ch in xrange(0x4e00, 0xa000):
i += 1
s = str(i)+' '+hex(ch)+':'+unichr(ch).encode('utf8')
f.write(s)
print s
if i % 10 == 0:
f.write('\n')

f.close()

程序输出文件结果摘录:

view plaincopy to clipboardprint?
1 0x4e00:一2 0x4e01:丁3 0x4e02:丂4 0x4e03:七5 0x4e04:丄6 0x4e05:丅7
0x4e06:丆8 0x4e07:万9 0x4e08:丈10 0x4e09:三
11 0x4e0a:上12 0x4e0b:下13 0x4e0c:丌14 0x4e0d:不15 0x4e0e:与16 0x4e0f:丏17
0x4e10:丐18 0x4e11:丑19 0x4e12:丒20 0x4e13:专
21 0x4e14:且22 0x4e15:丕23 0x4e16:世24 0x4e17:丗25 0x4e18:丘26 0x4e19:丙27
0x4e1a:业28 0x4e1b:丛29 0x4e1c:东30 0x4e1d:丝
31 0x4e1e:丞32 0x4e1f:丟33 0x4e20:丠34 0x4e21:両35 0x4e22:丢36 0x4e23:丣37
0x4e24:两38 0x4e25:严39 0x4e26:並40 0x4e27:丧
41 0x4e28:丨42 0x4e29:丩43 0x4e2a:个44 0x4e2b:丫45 0x4e2c:丬46 0x4e2d:中47
0x4e2e:丮48 0x4e2f:丯49 0x4e30:丰50 0x4e31:丱
51 0x4e32:串52 0x4e33:丳53 0x4e34:临54 0x4e35:丵55 0x4e36:丶56 0x4e37:丷57
0x4e38:丸58 0x4e39:丹59 0x4e3a:为60 0x4e3b:主
61 0x4e3c:丼62 0x4e3d:丽63 0x4e3e:举64 0x4e3f:丿65 0x4e40:乀66 0x4e41:乁67
0x4e42:乂68 0x4e43:乃69 0x4e44:乄70 0x4e45:久
...
...
...
20881 0x9f90:龐20882 0x9f91:龑20883 0x9f92:龒20884 0x9f93:龓20885
0x9f94:龔20886 0x9f95:龕20887 0x9f96:龖20888 0x9f97:龗20889 0x9f98:龘20890
0x9f99:龙
20891 0x9f9a:龚20892 0x9f9b:龛20893 0x9f9c:龜20894 0x9f9d:龝20895
0x9f9e:龞20896 0x9f9f:龟20897 0x9fa0:龠20898 0x9fa1:龡20899 0x9fa2:龢20900
0x9fa3:龣
20901 0x9fa4:龤20902 0x9fa5:龥20903 0x9fa6:龦20904 0x9fa7:龧20905
0x9fa8:龨20906 0x9fa9:龩20907 0x9faa:龪20908 0x9fab:龫20909 0x9fac:龬20910
0x9fad:龭
20911 0x9fae:龮20912 0x9faf:龯20913 0x9fb0:龰20914 0x9fb1:龱20915
0x9fb2:龲20916 0x9fb3:龳20917 0x9fb4:龴20918 0x9fb5:龵20919 0x9fb6:龶20920
0x9fb7:龷
20921 0x9fb8:龸20922 0x9fb9:龹20923 0x9fba:龺20924 0x9fbb:龻20925
0x9fbc:龼20926 0x9fbd:龽20927 0x9fbe:龾20928 0x9fbf:龿20929 0x9fc0:鿀20930
0x9fc1:鿁
20931 0x9fc2:鿂20932 0x9fc3:鿃20933 0x9fc4:鿄20934 0x9fc5:鿅20935
0x9fc6:鿆20936 0x9fc7:鿇20937 0x9fc8:鿈20938 0x9fc9:鿉20939

从打印结果看,0x4E00-0x9FC3是有汉字的。0x9FC4-0x9FFF还是空白。但随后的版本会逐渐往上增长。


======

三、参考:

======
官方说明:http://www.unicode.org/versions/Unicode5.0.0/ch12.pdf
unihan字符全集官方下载:ftp://ftp.unicode.org/Public/UNIDATA/Unihan.zip
最新报告:http://www.unicode.org/reports/tr38/
20902个unicode汉字及拼音表:
http://dl1.csdn.net/fd.php?i=14601582879492&s=ed7babc9bd585c105a8b58c8b33830d6

unicode 5.0和gb等的关系 http://www.fmddlmyy.cn/text24.html

vim编辑退出后乱码问题解决

问题描述:使用gnome-terminal 用vim打开文件编辑后退出,提示符就变成乱码了。

下面是我google到的几种网友建议
1 我遇到过这情况,把locale改了就行,我是换成了LANG=zh_CN
LC_CTYPE="zh_CN"等

2一般用reset或者用gvim来跳过这个毛病
以前有位兄弟发过这样的贴,而且已经解决了。一时找不找。我记得好像是菜单Edit-->Current
Profile-->Title and Command里设置标题。

3
其实这不是vim的毛病,例如说如果你用konsole就没问题。实际上这是gnome-terminal的问题。在sir上看到过,只要在gnome-terminal的
配置文件-->标题和命令-->标题 中把 "终端" 两字的前后各加一个英文空格即可。
我这里也一样
没去研究过什么问题
反正很少用gvim
所以把gvim给cut 了

gnome-terminal 菜单里面--Terminal--reset 或reset and clear

最终解决:
法1 把gvim给cut 了(不是办法的方法)

查看 gvim的安装包

lingyun@lingyun:/media/movie/music/$ sudo apt-get install gvim
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package gvim is a virtual package provided by:
vim-tcl 1:7.1-138+1ubuntu3
vim-ruby 1:7.1-138+1ubuntu3
vim-python 1:7.1-138+1ubuntu3
vim-perl 1:7.1-138+1ubuntu3
vim-gtk 1:7.1-138+1ubuntu3
vim-full 1:7.1-138+1ubuntu3
vim-gnome 1:7.1-138+1ubuntu3
You should explicitly select one to install.
E: Package gvim has no installation candidate

因为 You should explicitly select one to install, 必须把上面的包都cut才行。

lingyun@lingyun:/media/movie/music/$ sudo apt-get remove vim-

[Tab]

vim-addon-manager vim-doc vim-gnome vim-gui-common vim-full
vim-scripts vim-tiny vim-gtk vim-runtime vim-syntax-gtk
vim-vimoutliner

法2 根据网友的建议及自己判断和不断的尝试,认为以下两点是关键

其实这不是vim的毛病,例如说如果你用konsole就没问题。实际上这是gnome-terminal的问题

将默认 vi 和 vim 链接到 vim.basic 此程序,解决 vi/vim 退出后终端乱码问题。

sudo update-alternatives -- config vi
sudo update-alternatives -- config vim

lingyun@lingyun:/media/movie/music/$ sudo update-alternatives --config vim

There are 3 alternatives which provide `vim'.

Selection Alternative
-----------------------------------------------
1 /usr/bin/vim.tiny
2 /usr/bin/vim.basic

*+ 3 /usr/bin/vim.gnome
Press enter to keep the default[*], or type selection number: 2
可见安装gvim后,默认vi, vim都的连接到了 /usr/bin/vim.gnome

参考:
http://www.linuxsir.org/bbs/thread225352.html
http://forum.ubuntu.org.cn/viewtopic.php?t=122314&sid=683901a07192d57b8c10691b44b0ea2c
http://forum.ubuntu.com.cn/about47661.html
http://blog.upsuper.org.cn/solve-the-problem-of-terminal-becoming-messy-after-exit-vim/

ubuntu 使用xp下的打印机

ubuntu要使用window xp下共享的打印机,需先安装samba:
sudo aptitude install samba
然后,进入"系统-系统管理-打印",新建打印机。选最下面的"网络打印机",Windows
Printer via SAMBA,
输入IP地址和用户名密码,浏览一下共享的打印机,并选择如hpLaserJ。进入后驱动选一种品牌,如HP。选相应的型号,如HP
LaserJet 1300 Series Postscript [en][推荐]。完成。
打印机地址类似: smb://192.168.12.112/hpLaserJ
即可打印。

至此,离完全脱离XP又近了一步!

2010年1月17日星期日

网络编程小结

1. 如果在已经处于
ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
  BOOL bReuseaddr=TRUE;
  setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const
char*)&bReuseaddr,sizeof(BOOL));

  2.
如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:
  BOOL bDontLinger = FALSE;
  setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const
char*)&bDontLinger,sizeof(BOOL));

  3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
  int nNetTimeout=1000;//1秒
  //发送时限
  setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char
*)&nNetTimeout,sizeof(int));
  //接收时限
  setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char
*)&nNetTimeout,sizeof(int));

  4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:
  // 接收缓冲区
  int nRecvBuf=32*1024;//设置为32K
  setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
  //发送缓冲区
  int nSendBuf=32*1024;//设置为32K
  setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
  
  5.
如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响程序的性能:
  int nZero=0;
  setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));
  
  6.同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):
  int nZero=0;
  setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));

  7.一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性:
  BOOL bBroadcast=TRUE;
  setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const
char*)&bBroadcast,sizeof(BOOL));
  
  8.在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可以设置connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的作用,在阻塞的函数调用中作用不大)
  BOOL bConditionalAccept=TRUE;
  setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const
char*)&bConditionalAccept,sizeof(BOOL));

  9.如果在发送数据的过程中(send()没有完成,还有数据没发送)而调用了closesocket(),以前我们一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了,如何设置让程序满足具体应用的要求(即让没发完的数据发送出去后在关闭socket)?
  struct linger {
  u_short l_onoff;
  u_short l_linger;
  };
  linger m_sLinger;
  m_sLinger.l_onoff=1;//(在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
  // 如果m_sLinger.l_onoff=0;则功能和2.)作用相同;
  m_sLinger.l_linger=5;//(容许逗留的时间为5秒)
  setsockopt(s,SOL_SOCKET,SO_LINGER,(const
char*)&m_sLinger,sizeof(linger));
  Note:1.在设置了逗留延时,用于一个非阻塞的socket是作用不大的,最好不用;
  2.如果想要程序不经历SO_LINGER需要设置SO_DONTLINGER,或者设置l_onoff=0;
  
  10.还一个用的比较少的是在SDI或者是Dialog的程序中,可以记录socket的调试信息:
  (前不久做过这个函数的测试,调式信息可以保存,包括socket建立时候的参数,采用的
  具体协议,以及出错的代码都可以记录下来)
  BOOL bDebug=TRUE;
  setsockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&bDebug,sizeof(BOOL));
  
  11.附加:往往通过setsockopt()设置了缓冲区大小,但还不能满足数据的传输需求,我的习惯是自己写个处理网络缓冲的类,动态分配内存。