<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    這是6.0之前的poll模型。
    solaris\native\sun\nio\ch\SocketChannelImpl.c
    JNIEXPORT?jint?JNICALL
    Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv?
    *env,?jobject?this,
    ???????????????????????????jobject?fdo,?jboolean?block,
    ???????????????????????????????????????????????jboolean?ready)
    {
    ????
    int?error?=?0;
    ????
    int?n?=?sizeof(int);
    ????jint?fd?
    =?fdval(env,?fdo);
    ????
    int?result?=?0;
    ????struct?pollfd?poller;

    ????poller.revents?
    =?1;
    ????
    if?(!ready)?{
    ????????poller.fd?
    =?fd;
    ????????poller.events?
    =?POLLOUT;
    ????????poller.revents?
    =?0;
    ????????result?
    =?poll(&poller,?1,?block???-1?:?0);
    ????????
    if?(result?<?0)?{
    ????????????JNU_ThrowIOExceptionWithLastError(env,?
    "Poll?failed");
    ????????????
    return?IOS_THROWN;
    ????????}
    ????
    if?(!block?&&?(result?==?0))
    ????????
    return?IOS_UNAVAILABLE;
    ????}

    ????
    if?(poller.revents)?{
    ????????errno?
    =?0;
    ????????result?
    =?getsockopt(fd,?SOL_SOCKET,?SO_ERROR,?&error,?&n);
    ????????
    if?(result?<?0)?{
    ????????????handleSocketError(env,?errno);
    ????????????
    return?JNI_FALSE;
    ????????}?
    else?if?(error)?{
    ????????????handleSocketError(env,?error);
    ????????????
    return?JNI_FALSE;
    ????????}
    ????????
    return?1;
    ????}
    ????
    return?0;
    }


    6.0缺省的模型是使用epoll
    E:\Java\jdk-6-rc-src\j2se\src\solaris\native\sun\nio\ch\EPollArrayWrapper.c

    JNIEXPORT?void?JNICALL
    Java_sun_nio_ch_EPollArrayWrapper_init(JNIEnv?
    *env,?jclass?this)?
    {
    ????epoll_create_func?
    =?(epoll_create_t)?dlsym(RTLD_DEFAULT,?"epoll_create");
    ????epoll_ctl_func????
    =?(epoll_ctl_t)????dlsym(RTLD_DEFAULT,?"epoll_ctl");
    ????epoll_wait_func???
    =?(epoll_wait_t)???dlsym(RTLD_DEFAULT,?"epoll_wait");
    ???????????????????????????????????????????????????????????????????????????????????????????????????
    ????
    if?((epoll_create_func?==?NULL)?||?(epoll_ctl_func?==?NULL)?||
    ????????(epoll_wait_func?
    ==?NULL))?{
    ????????JNU_ThrowInternalError(env,?
    "unable?to?get?address?of?epoll?functions,?pre-2.6?kernel?");
    ????}
    }


    具體程序的流程我還是不夠清楚,還有待進一步深入了解。
    posted on 2006-11-22 01:34 溫少的日志 閱讀(5529) 評論(2)  編輯  收藏
    Comments
    • # re: 關(guān)于sun JDK nio在linux下的實現(xiàn)。
      BeanSoft
      Posted @ 2006-11-22 11:04
      看來真正的高手還是要精通各個平臺下的標準C啊, 例如 JDK 的 N 多 BUG, 最后都得修改 C 代碼. 還好 SUN 明年開源 JDK, 這樣有實力的企業(yè)可以自己增強 JDK.  回復  更多評論   
    • # re: 關(guān)于sun JDK nio在linux下的實現(xiàn)。[未登錄]
      ken
      Posted @ 2008-01-01 02:35
      原來JKD1。6在LINUX下的NIO是實現(xiàn)自EPOLL的。。但是不知道怎么設(shè)置LT或ET模式?  回復  更多評論   

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
     
    主站蜘蛛池模板: 777亚洲精品乱码久久久久久 | 国产一级淫片a免费播放口| 亚洲国产成人手机在线电影bd| 在线观看H网址免费入口| 亚洲av无码日韩av无码网站冲| 国产gv天堂亚洲国产gv刚刚碰| 又大又硬又爽又粗又快的视频免费| 亚洲精品宾馆在线精品酒店| 亚洲综合AV在线在线播放| 亚洲免费电影网站| 边摸边吃奶边做爽免费视频99| 亚洲视频2020| 免费乱码中文字幕网站| 日韩精品人妻系列无码专区免费| 亚洲av色香蕉一区二区三区| 亚洲AV无码乱码国产麻豆穿越| 免费无码又爽又高潮视频| 日本高清在线免费| 永久免费看bbb| 国产成人免费网站在线观看| 亚洲成a人片在线不卡| 日本在线看片免费人成视频1000| 亚洲综合欧美色五月俺也去| 亚洲精品中文字幕乱码三区| 好吊妞788免费视频播放| 成av免费大片黄在线观看| 亚洲人成色99999在线观看| 无码A级毛片免费视频内谢| 久久无码av亚洲精品色午夜| 无码久久精品国产亚洲Av影片| 四虎影视永久免费观看| 国产成人免费午夜在线观看| a级毛片毛片免费观看永久| 日韩亚洲综合精品国产| 亚洲一级片在线观看| 亚洲av无码乱码国产精品fc2| 少妇亚洲免费精品| 免费无码又爽又高潮视频| 全免费毛片在线播放| 9420免费高清在线视频| 在线观看肉片AV网站免费|