Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

example_echocli为什么socket fd为什么没有设置成非阻塞 #68

Open
xueyibing opened this issue Jan 16, 2018 · 3 comments
Open

Comments

@xueyibing
Copy link

example_echosrv的 socket fd设置了非阻塞,但是example_echocli没有,为什么?

@askYangc
Copy link

实际上只要使用了socket这个hook过的函数,底层的socket都会是非阻塞的。

@CoderJie
Copy link

实际上只要使用了socket这个hook过的函数,底层的socket都会是非阻塞的。

那就直接执行系统调用了,就不会再执行我们hook后的逻辑了,也就没法加入到hook的poll中了,那岂不是没有意义了? @askYangChuan

@askYangc
Copy link

askYangc commented Sep 27, 2018

实际上只要使用了socket这个hook过的函数,底层的socket都会是非阻塞的。

那就直接执行系统调用了,就不会再执行我们hook后的逻辑了,也就没法加入到hook的poll中了,那岂不是没有意义了?

当然只要使用了co_enable_hook_sys()的协程使用socket()才会使创建的socket是非阻塞的。
struct rpchook_t的user_flag记录了O_NONBLOCK属性,很多hook的系统调用如read则根据这个来判断应用层是否显式设置socket非阻塞。我个人认为这里是Libco库希望应用层自己设置的非阻塞套接字自己去管理,不应该被libco hook。因为Libco本来只是希望管理应用层创建的阻塞套接字。
我觉得他开源的代码很不错,但是肯定是裁剪的代码,所以有很多地方不完善。我修改了部分read和write函数的代码,因为我希望被libco管理的阻塞套接字应该表现的跟系统原来的阻塞套接字一样。

对了,他的汇编代码有问题,希望使用的时候参考这两位的修改。
#90

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants