发信人hightman@feeling-NOsmthSPAM-org (xtt),
看板Maple
标 题[M3] 修正 正在回热讯的网友收不到聊天呼叫
发信站温馨小屋 (Thu Jan 2 13:22:25 2003)
转信站Ptt!news.cs.nthu!news.neu.edu.cn!news2.happynet.org!news.feeling.smth.
以前在 ^R 回信息时,如果有人来串门(呼你聊天或打小鸡)
您收不到它的信号,而他还在可怜的等您回答呢!
2003/01/02: 修正 正在回热讯的网友收不到聊天呼叫
>-----------------src/maple/talk.c-----------------<
1. 修改 talk_page() 函数
... ...
close(msgsock);
+ /* hightman.030102: 解决回复热讯时不能talk的问题, 结束记得放sockport */
+ cutmp->sockport = 0;
... ...
2. 修改 talk_rqst() 函数
... ...
+ /* hightman.030102: 解决回复热讯时不能talk的问题, 开始就记入sockport */
+ cutmp->sockport = port;
sock = socket(AF_INET, SOCK_STREAM, 0);
...
...
close(sock);
+ /* hightman.030102: 解决回复热讯时不能talk的问题, 结束记得放sockport */
+ cutmp->sockport = 0;
+ cutmp->talker = NULL; /* 为何不顺便放掉这个呢 */
... ...
>----------------src/maple/visio.c--------------<
1. 修改 igetch() 函数
... ...
#define IM_TALK 0x04
+ /* hightman.030102: 解决回复热讯时不能talk的问题 */
+ #define REPLY_TALK 0x08 /* ^R + talk_rqst */
... ...
data = vi_pool;
nfds = 0;
+ /* hightman.030102: 解决回复热讯时不能talk的问题 */
+ if (cutmp != NULL && (cutmp->sockport > 0) && !(imode & IM_TALK))
+ // 刚开始talk
+ {
+ imode |= IM_TALK;
+ if (imode & IM_REPLY)
+ {
+ imode ^= IM_REPLY; // 否则看不到 vio_fd 就惨了
+ imode |= REPLY_TALK; // 结束 talk 时需要还原 IM_REPLY
+ }
+ }
+ else if (cutmp != NULL && (cutmp->sockport <= 0) && (imode & IM_TALK))
+ // talk 刚结束
+ {
+ imode ^= IM_TALK;
+ if (imode & REPLY_TALK)
+ {
+ imode ^= REPLY_TALK;
+ imode |= IM_REPLY; // 继续 reply 吧
+ }
+ }
+ /* hightman.030102: end */
... ...
/*
* Thor.980307: 想不到什麽好方法, 在^R时禁止talk, 否则会因 ,
* 没有vio_fd, 看不到 I_OTHERDATA 所以在 ctrl-r时talk, 看不到对方打
*/
+ /* hightman.030102: 已经解决此问题 */
+ #if 0
signal(SIGUSR1, SIG_IGN);
+ #endif
imode |= IM_REPLY;
bmw_reply();
imode ^= IM_REPLY;
/*
* Thor.980307: 想不到什麽好方法, 在^R时禁止talk, 否则会因 ,
* 没有vio_fd, 看不到 I_OTHERDATA 所以在 ctrl-r时talk, 看不到对方打
*/
+ /* hightman.030102: 已经解决此问题 */
+ #if 0
signal(SIGUSR1, (void *) talk_rqst);
+ #endif
... ...
--
※ 来源:.温馨小屋 bbs.feeling.smth.org.[FROM: lib.zju.edu.cn]