<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: 關于sun JDK nio在linux下的實現。
      BeanSoft
      Posted @ 2006-11-22 11:04
      看來真正的高手還是要精通各個平臺下的標準C啊, 例如 JDK 的 N 多 BUG, 最后都得修改 C 代碼. 還好 SUN 明年開源 JDK, 這樣有實力的企業可以自己增強 JDK.  回復  更多評論   
    • # re: 關于sun JDK nio在linux下的實現。[未登錄]
      ken
      Posted @ 2008-01-01 02:35
      原來JKD1。6在LINUX下的NIO是實現自EPOLL的。。但是不知道怎么設置LT或ET模式?  回復  更多評論   

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


    網站導航:
     
     
    主站蜘蛛池模板: 亚洲情综合五月天| 四虎永久免费影院| 亚洲午夜久久久影院伊人| 亚洲av成人中文无码专区| 国产亚洲精久久久久久无码AV | 老司机亚洲精品影院| 91视频免费观看| 久久精品国产亚洲AV麻豆不卡| 日韩亚洲产在线观看| 亚洲欧洲免费无码| 精品久久久久久亚洲| 国产免费人成视频尤勿视频| 久久亚洲欧洲国产综合| a级片免费观看视频| 久久久久久亚洲Av无码精品专口| 91制片厂制作传媒免费版樱花| 亚洲色图校园春色| 成av免费大片黄在线观看| 亚洲永久精品ww47| 免费的全黄一级录像带| 国产亚洲精品高清在线| 青青操视频在线免费观看| 亚洲黄色片免费看| 在线jyzzjyzz免费视频| 亚洲综合中文字幕无线码| 午夜免费啪视频在线观看| 91大神亚洲影视在线| 天天操夜夜操免费视频| 男人和女人高潮免费网站| 亚洲精品少妇30p| 很黄很黄的网站免费的| 亚洲视频在线免费看| 全免费一级毛片在线播放| 免费人成再在线观看网站| 亚洲va无码手机在线电影| 久久WWW免费人成人片| 一区二区三区视频免费| 亚洲阿v天堂在线2017免费| 国产精品免费看久久久 | 免费a级毛片高清视频不卡 | 亚洲国产成人久久精品软件|