Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates > by-pkgid > 675c8c8167236dfcf8d66da674f931e8 > files > 917

erlang-doc-R15B-03.3.fc17.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css">
<title>Erlang -- gen_tcp</title>
</head>
<body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container">
<script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript">
            <!--
              function getWinHeight() {
                var myHeight = 0;
                if( typeof( window.innerHeight ) == 'number' ) {
                  //Non-IE
                  myHeight = window.innerHeight;
                } else if( document.documentElement && ( document.documentElement.clientWidth ||
                                                         document.documentElement.clientHeight ) ) {
                  //IE 6+ in 'standards compliant mode'
                  myHeight = document.documentElement.clientHeight;
                } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                  //IE 4 compatible
                  myHeight = document.body.clientHeight;
                }
                return myHeight;
              }

              function setscrollpos() {
                var objf=document.getElementById('loadscrollpos');
                 document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2;
              }

              function addEvent(obj, evType, fn){
                if (obj.addEventListener){
                obj.addEventListener(evType, fn, true);
                return true;
              } else if (obj.attachEvent){
                var r = obj.attachEvent("on"+evType, fn);
                return r;
              } else {
                return false;
              }
             }

             addEvent(window, 'load', setscrollpos);

             //--></script><div id="leftnav"><div class="innertube">
<img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/kernel-2.15.3.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>Kernel</strong><br><strong>Reference Manual</strong><br><small>Version 2.15.3</small></p>
<br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Table of Contents</strong></small></p>
<ul class="flipMenu">
<li title="kernel (App)"><a href="kernel_app.html">kernel (App)
                </a></li>
<li id="no" title="application " expanded="false">application<ul>
<li><a href="application.html">
                  Top of manual page
                </a></li>
<li title="get_all_env-0"><a href="application.html#get_all_env-0">get_all_env/0</a></li>
<li title="get_all_env-1"><a href="application.html#get_all_env-1">get_all_env/1</a></li>
<li title="get_all_key-0"><a href="application.html#get_all_key-0">get_all_key/0</a></li>
<li title="get_all_key-1"><a href="application.html#get_all_key-1">get_all_key/1</a></li>
<li title="get_application-0"><a href="application.html#get_application-0">get_application/0</a></li>
<li title="get_application-1"><a href="application.html#get_application-1">get_application/1</a></li>
<li title="get_env-1"><a href="application.html#get_env-1">get_env/1</a></li>
<li title="get_env-2"><a href="application.html#get_env-2">get_env/2</a></li>
<li title="get_key-1"><a href="application.html#get_key-1">get_key/1</a></li>
<li title="get_key-2"><a href="application.html#get_key-2">get_key/2</a></li>
<li title="load-1"><a href="application.html#load-1">load/1</a></li>
<li title="load-2"><a href="application.html#load-2">load/2</a></li>
<li title="loaded_applications-0"><a href="application.html#loaded_applications-0">loaded_applications/0</a></li>
<li title="permit-2"><a href="application.html#permit-2">permit/2</a></li>
<li title="set_env-3"><a href="application.html#set_env-3">set_env/3</a></li>
<li title="set_env-4"><a href="application.html#set_env-4">set_env/4</a></li>
<li title="start-1"><a href="application.html#start-1">start/1</a></li>
<li title="start-2"><a href="application.html#start-2">start/2</a></li>
<li title="start_type-0"><a href="application.html#start_type-0">start_type/0</a></li>
<li title="stop-1"><a href="application.html#stop-1">stop/1</a></li>
<li title="takeover-2"><a href="application.html#takeover-2">takeover/2</a></li>
<li title="unload-1"><a href="application.html#unload-1">unload/1</a></li>
<li title="unset_env-2"><a href="application.html#unset_env-2">unset_env/2</a></li>
<li title="unset_env-3"><a href="application.html#unset_env-3">unset_env/3</a></li>
<li title="which_applications-0"><a href="application.html#which_applications-0">which_applications/0</a></li>
<li title="which_applications-1"><a href="application.html#which_applications-1">which_applications/1</a></li>
<li title="Module:start-2"><a href="application.html#Module:start-2">Module:start/2</a></li>
<li title="Module:start_phase-3"><a href="application.html#Module:start_phase-3">Module:start_phase/3</a></li>
<li title="Module:prep_stop-1"><a href="application.html#Module:prep_stop-1">Module:prep_stop/1</a></li>
<li title="Module:stop-1"><a href="application.html#Module:stop-1">Module:stop/1</a></li>
<li title="Module:config_change-3"><a href="application.html#Module:config_change-3">Module:config_change/3</a></li>
</ul>
</li>
<li id="no" title="auth " expanded="false">auth<ul>
<li><a href="auth.html">
                  Top of manual page
                </a></li>
<li title="is_auth-1"><a href="auth.html#is_auth-1">is_auth/1</a></li>
<li title="cookie-0"><a href="auth.html#cookie-0">cookie/0</a></li>
<li title="cookie-1"><a href="auth.html#cookie-1">cookie/1</a></li>
<li title="node_cookie-1"><a href="auth.html#node_cookie-1">node_cookie/1</a></li>
<li title="node_cookie-2"><a href="auth.html#node_cookie-2">node_cookie/2</a></li>
</ul>
</li>
<li id="no" title="code " expanded="false">code<ul>
<li><a href="code.html">
                  Top of manual page
                </a></li>
<li title="set_path-1"><a href="code.html#set_path-1">set_path/1</a></li>
<li title="get_path-0"><a href="code.html#get_path-0">get_path/0</a></li>
<li title="add_path-1"><a href="code.html#add_path-1">add_path/1</a></li>
<li title="add_pathz-1"><a href="code.html#add_pathz-1">add_pathz/1</a></li>
<li title="add_patha-1"><a href="code.html#add_patha-1">add_patha/1</a></li>
<li title="add_paths-1"><a href="code.html#add_paths-1">add_paths/1</a></li>
<li title="add_pathsz-1"><a href="code.html#add_pathsz-1">add_pathsz/1</a></li>
<li title="add_pathsa-1"><a href="code.html#add_pathsa-1">add_pathsa/1</a></li>
<li title="del_path-1"><a href="code.html#del_path-1">del_path/1</a></li>
<li title="replace_path-2"><a href="code.html#replace_path-2">replace_path/2</a></li>
<li title="load_file-1"><a href="code.html#load_file-1">load_file/1</a></li>
<li title="load_abs-1"><a href="code.html#load_abs-1">load_abs/1</a></li>
<li title="ensure_loaded-1"><a href="code.html#ensure_loaded-1">ensure_loaded/1</a></li>
<li title="load_binary-3"><a href="code.html#load_binary-3">load_binary/3</a></li>
<li title="delete-1"><a href="code.html#delete-1">delete/1</a></li>
<li title="purge-1"><a href="code.html#purge-1">purge/1</a></li>
<li title="soft_purge-1"><a href="code.html#soft_purge-1">soft_purge/1</a></li>
<li title="is_loaded-1"><a href="code.html#is_loaded-1">is_loaded/1</a></li>
<li title="all_loaded-0"><a href="code.html#all_loaded-0">all_loaded/0</a></li>
<li title="which-1"><a href="code.html#which-1">which/1</a></li>
<li title="get_object_code-1"><a href="code.html#get_object_code-1">get_object_code/1</a></li>
<li title="root_dir-0"><a href="code.html#root_dir-0">root_dir/0</a></li>
<li title="lib_dir-0"><a href="code.html#lib_dir-0">lib_dir/0</a></li>
<li title="lib_dir-1"><a href="code.html#lib_dir-1">lib_dir/1</a></li>
<li title="lib_dir-2"><a href="code.html#lib_dir-2">lib_dir/2</a></li>
<li title="compiler_dir-0"><a href="code.html#compiler_dir-0">compiler_dir/0</a></li>
<li title="priv_dir-1"><a href="code.html#priv_dir-1">priv_dir/1</a></li>
<li title="objfile_extension-0"><a href="code.html#objfile_extension-0">objfile_extension/0</a></li>
<li title="stick_dir-1"><a href="code.html#stick_dir-1">stick_dir/1</a></li>
<li title="unstick_dir-1"><a href="code.html#unstick_dir-1">unstick_dir/1</a></li>
<li title="is_sticky-1"><a href="code.html#is_sticky-1">is_sticky/1</a></li>
<li title="rehash-0"><a href="code.html#rehash-0">rehash/0</a></li>
<li title="where_is_file-1"><a href="code.html#where_is_file-1">where_is_file/1</a></li>
<li title="clash-0"><a href="code.html#clash-0">clash/0</a></li>
<li title="is_module_native-1"><a href="code.html#is_module_native-1">is_module_native/1</a></li>
</ul>
</li>
<li id="no" title="disk_log " expanded="false">disk_log<ul>
<li><a href="disk_log.html">
                  Top of manual page
                </a></li>
<li title="accessible_logs-0"><a href="disk_log.html#accessible_logs-0">accessible_logs/0</a></li>
<li title="alog-2"><a href="disk_log.html#alog-2">alog/2</a></li>
<li title="balog-2"><a href="disk_log.html#balog-2">balog/2</a></li>
<li title="alog_terms-2"><a href="disk_log.html#alog_terms-2">alog_terms/2</a></li>
<li title="balog_terms-2"><a href="disk_log.html#balog_terms-2">balog_terms/2</a></li>
<li title="block-1"><a href="disk_log.html#block-1">block/1</a></li>
<li title="block-2"><a href="disk_log.html#block-2">block/2</a></li>
<li title="change_header-2"><a href="disk_log.html#change_header-2">change_header/2</a></li>
<li title="change_notify-3"><a href="disk_log.html#change_notify-3">change_notify/3</a></li>
<li title="change_size-2"><a href="disk_log.html#change_size-2">change_size/2</a></li>
<li title="chunk-2"><a href="disk_log.html#chunk-2">chunk/2</a></li>
<li title="chunk-3"><a href="disk_log.html#chunk-3">chunk/3</a></li>
<li title="bchunk-2"><a href="disk_log.html#bchunk-2">bchunk/2</a></li>
<li title="bchunk-3"><a href="disk_log.html#bchunk-3">bchunk/3</a></li>
<li title="chunk_info-1"><a href="disk_log.html#chunk_info-1">chunk_info/1</a></li>
<li title="chunk_step-3"><a href="disk_log.html#chunk_step-3">chunk_step/3</a></li>
<li title="close-1"><a href="disk_log.html#close-1">close/1</a></li>
<li title="format_error-1"><a href="disk_log.html#format_error-1">format_error/1</a></li>
<li title="inc_wrap_file-1"><a href="disk_log.html#inc_wrap_file-1">inc_wrap_file/1</a></li>
<li title="info-1"><a href="disk_log.html#info-1">info/1</a></li>
<li title="lclose-1"><a href="disk_log.html#lclose-1">lclose/1</a></li>
<li title="lclose-2"><a href="disk_log.html#lclose-2">lclose/2</a></li>
<li title="log-2"><a href="disk_log.html#log-2">log/2</a></li>
<li title="blog-2"><a href="disk_log.html#blog-2">blog/2</a></li>
<li title="log_terms-2"><a href="disk_log.html#log_terms-2">log_terms/2</a></li>
<li title="blog_terms-2"><a href="disk_log.html#blog_terms-2">blog_terms/2</a></li>
<li title="open-1"><a href="disk_log.html#open-1">open/1</a></li>
<li title="pid2name-1"><a href="disk_log.html#pid2name-1">pid2name/1</a></li>
<li title="reopen-2"><a href="disk_log.html#reopen-2">reopen/2</a></li>
<li title="reopen-3"><a href="disk_log.html#reopen-3">reopen/3</a></li>
<li title="breopen-3"><a href="disk_log.html#breopen-3">breopen/3</a></li>
<li title="sync-1"><a href="disk_log.html#sync-1">sync/1</a></li>
<li title="truncate-1"><a href="disk_log.html#truncate-1">truncate/1</a></li>
<li title="truncate-2"><a href="disk_log.html#truncate-2">truncate/2</a></li>
<li title="btruncate-2"><a href="disk_log.html#btruncate-2">btruncate/2</a></li>
<li title="unblock-1"><a href="disk_log.html#unblock-1">unblock/1</a></li>
</ul>
</li>
<li id="no" title="erl_boot_server " expanded="false">erl_boot_server<ul>
<li><a href="erl_boot_server.html">
                  Top of manual page
                </a></li>
<li title="start-1"><a href="erl_boot_server.html#start-1">start/1</a></li>
<li title="start_link-1"><a href="erl_boot_server.html#start_link-1">start_link/1</a></li>
<li title="add_slave-1"><a href="erl_boot_server.html#add_slave-1">add_slave/1</a></li>
<li title="delete_slave-1"><a href="erl_boot_server.html#delete_slave-1">delete_slave/1</a></li>
<li title="which_slaves-0"><a href="erl_boot_server.html#which_slaves-0">which_slaves/0</a></li>
</ul>
</li>
<li id="no" title="erl_ddll " expanded="false">erl_ddll<ul>
<li><a href="erl_ddll.html">
                  Top of manual page
                </a></li>
<li title="demonitor-1"><a href="erl_ddll.html#demonitor-1">demonitor/1</a></li>
<li title="info-0"><a href="erl_ddll.html#info-0">info/0</a></li>
<li title="info-1"><a href="erl_ddll.html#info-1">info/1</a></li>
<li title="info-2"><a href="erl_ddll.html#info-2">info/2</a></li>
<li title="load-2"><a href="erl_ddll.html#load-2">load/2</a></li>
<li title="load_driver-2"><a href="erl_ddll.html#load_driver-2">load_driver/2</a></li>
<li title="monitor-2"><a href="erl_ddll.html#monitor-2">monitor/2</a></li>
<li title="reload-2"><a href="erl_ddll.html#reload-2">reload/2</a></li>
<li title="reload_driver-2"><a href="erl_ddll.html#reload_driver-2">reload_driver/2</a></li>
<li title="try_load-3"><a href="erl_ddll.html#try_load-3">try_load/3</a></li>
<li title="try_unload-2"><a href="erl_ddll.html#try_unload-2">try_unload/2</a></li>
<li title="unload-1"><a href="erl_ddll.html#unload-1">unload/1</a></li>
<li title="unload_driver-1"><a href="erl_ddll.html#unload_driver-1">unload_driver/1</a></li>
<li title="loaded_drivers-0"><a href="erl_ddll.html#loaded_drivers-0">loaded_drivers/0</a></li>
<li title="format_error-1"><a href="erl_ddll.html#format_error-1">format_error/1</a></li>
</ul>
</li>
<li title="erl_prim_loader"><a href="erl_prim_loader.html">erl_prim_loader</a></li>
<li title="erlang"><a href="erlang.html">erlang</a></li>
<li id="no" title="error_handler " expanded="false">error_handler<ul>
<li><a href="error_handler.html">
                  Top of manual page
                </a></li>
<li title="undefined_function-3"><a href="error_handler.html#undefined_function-3">undefined_function/3</a></li>
<li title="undefined_lambda-3"><a href="error_handler.html#undefined_lambda-3">undefined_lambda/3</a></li>
</ul>
</li>
<li id="no" title="error_logger " expanded="false">error_logger<ul>
<li><a href="error_logger.html">
                  Top of manual page
                </a></li>
<li title="error_msg-1"><a href="error_logger.html#error_msg-1">error_msg/1</a></li>
<li title="error_msg-2"><a href="error_logger.html#error_msg-2">error_msg/2</a></li>
<li title="format-2"><a href="error_logger.html#format-2">format/2</a></li>
<li title="error_report-1"><a href="error_logger.html#error_report-1">error_report/1</a></li>
<li title="error_report-2"><a href="error_logger.html#error_report-2">error_report/2</a></li>
<li title="warning_map-0"><a href="error_logger.html#warning_map-0">warning_map/0</a></li>
<li title="warning_msg-1"><a href="error_logger.html#warning_msg-1">warning_msg/1</a></li>
<li title="warning_msg-2"><a href="error_logger.html#warning_msg-2">warning_msg/2</a></li>
<li title="warning_report-1"><a href="error_logger.html#warning_report-1">warning_report/1</a></li>
<li title="warning_report-2"><a href="error_logger.html#warning_report-2">warning_report/2</a></li>
<li title="info_msg-1"><a href="error_logger.html#info_msg-1">info_msg/1</a></li>
<li title="info_msg-2"><a href="error_logger.html#info_msg-2">info_msg/2</a></li>
<li title="info_report-1"><a href="error_logger.html#info_report-1">info_report/1</a></li>
<li title="info_report-2"><a href="error_logger.html#info_report-2">info_report/2</a></li>
<li title="add_report_handler-1"><a href="error_logger.html#add_report_handler-1">add_report_handler/1</a></li>
<li title="add_report_handler-2"><a href="error_logger.html#add_report_handler-2">add_report_handler/2</a></li>
<li title="delete_report_handler-1"><a href="error_logger.html#delete_report_handler-1">delete_report_handler/1</a></li>
<li title="tty-1"><a href="error_logger.html#tty-1">tty/1</a></li>
<li title="logfile-1"><a href="error_logger.html#logfile-1">logfile/1</a></li>
</ul>
</li>
<li id="no" title="file " expanded="false">file<ul>
<li><a href="file.html">
                  Top of manual page
                </a></li>
<li title="advise-4"><a href="file.html#advise-4">advise/4</a></li>
<li title="change_group-2"><a href="file.html#change_group-2">change_group/2</a></li>
<li title="change_mode-2"><a href="file.html#change_mode-2">change_mode/2</a></li>
<li title="change_owner-2"><a href="file.html#change_owner-2">change_owner/2</a></li>
<li title="change_owner-3"><a href="file.html#change_owner-3">change_owner/3</a></li>
<li title="change_time-2"><a href="file.html#change_time-2">change_time/2</a></li>
<li title="change_time-3"><a href="file.html#change_time-3">change_time/3</a></li>
<li title="close-1"><a href="file.html#close-1">close/1</a></li>
<li title="consult-1"><a href="file.html#consult-1">consult/1</a></li>
<li title="copy-2"><a href="file.html#copy-2">copy/2</a></li>
<li title="copy-3"><a href="file.html#copy-3">copy/3</a></li>
<li title="del_dir-1"><a href="file.html#del_dir-1">del_dir/1</a></li>
<li title="delete-1"><a href="file.html#delete-1">delete/1</a></li>
<li title="eval-1"><a href="file.html#eval-1">eval/1</a></li>
<li title="eval-2"><a href="file.html#eval-2">eval/2</a></li>
<li title="file_info-1"><a href="file.html#file_info-1">file_info/1</a></li>
<li title="format_error-1"><a href="file.html#format_error-1">format_error/1</a></li>
<li title="get_cwd-0"><a href="file.html#get_cwd-0">get_cwd/0</a></li>
<li title="get_cwd-1"><a href="file.html#get_cwd-1">get_cwd/1</a></li>
<li title="list_dir-1"><a href="file.html#list_dir-1">list_dir/1</a></li>
<li title="make_dir-1"><a href="file.html#make_dir-1">make_dir/1</a></li>
<li title="make_link-2"><a href="file.html#make_link-2">make_link/2</a></li>
<li title="make_symlink-2"><a href="file.html#make_symlink-2">make_symlink/2</a></li>
<li title="native_name_encoding-0"><a href="file.html#native_name_encoding-0">native_name_encoding/0</a></li>
<li title="open-2"><a href="file.html#open-2">open/2</a></li>
<li title="path_consult-2"><a href="file.html#path_consult-2">path_consult/2</a></li>
<li title="path_eval-2"><a href="file.html#path_eval-2">path_eval/2</a></li>
<li title="path_open-3"><a href="file.html#path_open-3">path_open/3</a></li>
<li title="path_script-2"><a href="file.html#path_script-2">path_script/2</a></li>
<li title="path_script-3"><a href="file.html#path_script-3">path_script/3</a></li>
<li title="pid2name-1"><a href="file.html#pid2name-1">pid2name/1</a></li>
<li title="position-2"><a href="file.html#position-2">position/2</a></li>
<li title="pread-2"><a href="file.html#pread-2">pread/2</a></li>
<li title="pread-3"><a href="file.html#pread-3">pread/3</a></li>
<li title="pwrite-2"><a href="file.html#pwrite-2">pwrite/2</a></li>
<li title="pwrite-3"><a href="file.html#pwrite-3">pwrite/3</a></li>
<li title="read-2"><a href="file.html#read-2">read/2</a></li>
<li title="read_file-1"><a href="file.html#read_file-1">read_file/1</a></li>
<li title="read_file_info-1"><a href="file.html#read_file_info-1">read_file_info/1</a></li>
<li title="read_file_info-2"><a href="file.html#read_file_info-2">read_file_info/2</a></li>
<li title="read_line-1"><a href="file.html#read_line-1">read_line/1</a></li>
<li title="read_link-1"><a href="file.html#read_link-1">read_link/1</a></li>
<li title="read_link_info-1"><a href="file.html#read_link_info-1">read_link_info/1</a></li>
<li title="read_link_info-2"><a href="file.html#read_link_info-2">read_link_info/2</a></li>
<li title="rename-2"><a href="file.html#rename-2">rename/2</a></li>
<li title="script-1"><a href="file.html#script-1">script/1</a></li>
<li title="script-2"><a href="file.html#script-2">script/2</a></li>
<li title="set_cwd-1"><a href="file.html#set_cwd-1">set_cwd/1</a></li>
<li title="sync-1"><a href="file.html#sync-1">sync/1</a></li>
<li title="datasync-1"><a href="file.html#datasync-1">datasync/1</a></li>
<li title="truncate-1"><a href="file.html#truncate-1">truncate/1</a></li>
<li title="sendfile-2"><a href="file.html#sendfile-2">sendfile/2</a></li>
<li title="sendfile-5"><a href="file.html#sendfile-5">sendfile/5</a></li>
<li title="write-2"><a href="file.html#write-2">write/2</a></li>
<li title="write_file-2"><a href="file.html#write_file-2">write_file/2</a></li>
<li title="write_file-3"><a href="file.html#write_file-3">write_file/3</a></li>
<li title="write_file_info-2"><a href="file.html#write_file_info-2">write_file_info/2</a></li>
<li title="write_file_info-3"><a href="file.html#write_file_info-3">write_file_info/3</a></li>
</ul>
</li>
<li id="loadscrollpos" title="gen_tcp " expanded="true">gen_tcp<ul>
<li><a href="gen_tcp.html">
                  Top of manual page
                </a></li>
<li title="connect-3"><a href="gen_tcp.html#connect-3">connect/3</a></li>
<li title="connect-4"><a href="gen_tcp.html#connect-4">connect/4</a></li>
<li title="listen-2"><a href="gen_tcp.html#listen-2">listen/2</a></li>
<li title="accept-1"><a href="gen_tcp.html#accept-1">accept/1</a></li>
<li title="accept-2"><a href="gen_tcp.html#accept-2">accept/2</a></li>
<li title="send-2"><a href="gen_tcp.html#send-2">send/2</a></li>
<li title="recv-2"><a href="gen_tcp.html#recv-2">recv/2</a></li>
<li title="recv-3"><a href="gen_tcp.html#recv-3">recv/3</a></li>
<li title="controlling_process-2"><a href="gen_tcp.html#controlling_process-2">controlling_process/2</a></li>
<li title="close-1"><a href="gen_tcp.html#close-1">close/1</a></li>
<li title="shutdown-2"><a href="gen_tcp.html#shutdown-2">shutdown/2</a></li>
</ul>
</li>
<li id="no" title="gen_udp " expanded="false">gen_udp<ul>
<li><a href="gen_udp.html">
                  Top of manual page
                </a></li>
<li title="open-1"><a href="gen_udp.html#open-1">open/1</a></li>
<li title="open-2"><a href="gen_udp.html#open-2">open/2</a></li>
<li title="send-4"><a href="gen_udp.html#send-4">send/4</a></li>
<li title="recv-2"><a href="gen_udp.html#recv-2">recv/2</a></li>
<li title="recv-3"><a href="gen_udp.html#recv-3">recv/3</a></li>
<li title="controlling_process-2"><a href="gen_udp.html#controlling_process-2">controlling_process/2</a></li>
<li title="close-1"><a href="gen_udp.html#close-1">close/1</a></li>
</ul>
</li>
<li id="no" title="gen_sctp " expanded="false">gen_sctp<ul>
<li><a href="gen_sctp.html">
                  Top of manual page
                </a></li>
<li title="abort-2"><a href="gen_sctp.html#abort-2">abort/2</a></li>
<li title="close-1"><a href="gen_sctp.html#close-1">close/1</a></li>
<li title="connect-4"><a href="gen_sctp.html#connect-4">connect/4</a></li>
<li title="connect-5"><a href="gen_sctp.html#connect-5">connect/5</a></li>
<li title="connect_init-4"><a href="gen_sctp.html#connect_init-4">connect_init/4</a></li>
<li title="connect_init-5"><a href="gen_sctp.html#connect_init-5">connect_init/5</a></li>
<li title="controlling_process-2"><a href="gen_sctp.html#controlling_process-2">controlling_process/2</a></li>
<li title="eof-2"><a href="gen_sctp.html#eof-2">eof/2</a></li>
<li title="listen-2"><a href="gen_sctp.html#listen-2">listen/2</a></li>
<li title="open-0"><a href="gen_sctp.html#open-0">open/0</a></li>
<li title="open-1"><a href="gen_sctp.html#open-1">open/1</a></li>
<li title="open-2"><a href="gen_sctp.html#open-2">open/2</a></li>
<li title="peeloff-2"><a href="gen_sctp.html#peeloff-2">peeloff/2</a></li>
<li title="recv-1"><a href="gen_sctp.html#recv-1">recv/1</a></li>
<li title="recv-2"><a href="gen_sctp.html#recv-2">recv/2</a></li>
<li title="send-3"><a href="gen_sctp.html#send-3">send/3</a></li>
<li title="send-4"><a href="gen_sctp.html#send-4">send/4</a></li>
<li title="error_string-1"><a href="gen_sctp.html#error_string-1">error_string/1</a></li>
</ul>
</li>
<li id="no" title="global " expanded="false">global<ul>
<li><a href="global.html">
                  Top of manual page
                </a></li>
<li title="del_lock-1"><a href="global.html#del_lock-1">del_lock/1</a></li>
<li title="del_lock-2"><a href="global.html#del_lock-2">del_lock/2</a></li>
<li title="notify_all_name-3"><a href="global.html#notify_all_name-3">notify_all_name/3</a></li>
<li title="random_exit_name-3"><a href="global.html#random_exit_name-3">random_exit_name/3</a></li>
<li title="random_notify_name-3"><a href="global.html#random_notify_name-3">random_notify_name/3</a></li>
<li title="register_name-2"><a href="global.html#register_name-2">register_name/2</a></li>
<li title="register_name-3"><a href="global.html#register_name-3">register_name/3</a></li>
<li title="registered_names-0"><a href="global.html#registered_names-0">registered_names/0</a></li>
<li title="re_register_name-2"><a href="global.html#re_register_name-2">re_register_name/2</a></li>
<li title="re_register_name-3"><a href="global.html#re_register_name-3">re_register_name/3</a></li>
<li title="send-2"><a href="global.html#send-2">send/2</a></li>
<li title="set_lock-1"><a href="global.html#set_lock-1">set_lock/1</a></li>
<li title="set_lock-2"><a href="global.html#set_lock-2">set_lock/2</a></li>
<li title="set_lock-3"><a href="global.html#set_lock-3">set_lock/3</a></li>
<li title="sync-0"><a href="global.html#sync-0">sync/0</a></li>
<li title="trans-2"><a href="global.html#trans-2">trans/2</a></li>
<li title="trans-3"><a href="global.html#trans-3">trans/3</a></li>
<li title="trans-4"><a href="global.html#trans-4">trans/4</a></li>
<li title="unregister_name-1"><a href="global.html#unregister_name-1">unregister_name/1</a></li>
<li title="whereis_name-1"><a href="global.html#whereis_name-1">whereis_name/1</a></li>
</ul>
</li>
<li id="no" title="global_group " expanded="false">global_group<ul>
<li><a href="global_group.html">
                  Top of manual page
                </a></li>
<li title="global_groups-0"><a href="global_group.html#global_groups-0">global_groups/0</a></li>
<li title="info-0"><a href="global_group.html#info-0">info/0</a></li>
<li title="monitor_nodes-1"><a href="global_group.html#monitor_nodes-1">monitor_nodes/1</a></li>
<li title="own_nodes-0"><a href="global_group.html#own_nodes-0">own_nodes/0</a></li>
<li title="registered_names-1"><a href="global_group.html#registered_names-1">registered_names/1</a></li>
<li title="send-2"><a href="global_group.html#send-2">send/2</a></li>
<li title="send-3"><a href="global_group.html#send-3">send/3</a></li>
<li title="sync-0"><a href="global_group.html#sync-0">sync/0</a></li>
<li title="whereis_name-1"><a href="global_group.html#whereis_name-1">whereis_name/1</a></li>
<li title="whereis_name-2"><a href="global_group.html#whereis_name-2">whereis_name/2</a></li>
</ul>
</li>
<li id="no" title="heart " expanded="false">heart<ul>
<li><a href="heart.html">
                  Top of manual page
                </a></li>
<li title="set_cmd-1"><a href="heart.html#set_cmd-1">set_cmd/1</a></li>
<li title="clear_cmd-0"><a href="heart.html#clear_cmd-0">clear_cmd/0</a></li>
<li title="get_cmd-0"><a href="heart.html#get_cmd-0">get_cmd/0</a></li>
</ul>
</li>
<li id="no" title="inet " expanded="false">inet<ul>
<li><a href="inet.html">
                  Top of manual page
                </a></li>
<li title="close-1"><a href="inet.html#close-1">close/1</a></li>
<li title="get_rc-0"><a href="inet.html#get_rc-0">get_rc/0</a></li>
<li title="format_error-1"><a href="inet.html#format_error-1">format_error/1</a></li>
<li title="getaddr-2"><a href="inet.html#getaddr-2">getaddr/2</a></li>
<li title="getaddrs-2"><a href="inet.html#getaddrs-2">getaddrs/2</a></li>
<li title="gethostbyaddr-1"><a href="inet.html#gethostbyaddr-1">gethostbyaddr/1</a></li>
<li title="gethostbyname-1"><a href="inet.html#gethostbyname-1">gethostbyname/1</a></li>
<li title="gethostbyname-2"><a href="inet.html#gethostbyname-2">gethostbyname/2</a></li>
<li title="gethostname-0"><a href="inet.html#gethostname-0">gethostname/0</a></li>
<li title="getifaddrs-0"><a href="inet.html#getifaddrs-0">getifaddrs/0</a></li>
<li title="getopts-2"><a href="inet.html#getopts-2">getopts/2</a></li>
<li title="getstat-1"><a href="inet.html#getstat-1">getstat/1</a></li>
<li title="getstat-2"><a href="inet.html#getstat-2">getstat/2</a></li>
<li title="peername-1"><a href="inet.html#peername-1">peername/1</a></li>
<li title="port-1"><a href="inet.html#port-1">port/1</a></li>
<li title="sockname-1"><a href="inet.html#sockname-1">sockname/1</a></li>
<li title="setopts-2"><a href="inet.html#setopts-2">setopts/2</a></li>
</ul>
</li>
<li id="no" title="inet_res " expanded="false">inet_res<ul>
<li><a href="inet_res.html">
                  Top of manual page
                </a></li>
<li title="getbyname-2"><a href="inet_res.html#getbyname-2">getbyname/2</a></li>
<li title="getbyname-3"><a href="inet_res.html#getbyname-3">getbyname/3</a></li>
<li title="gethostbyaddr-1"><a href="inet_res.html#gethostbyaddr-1">gethostbyaddr/1</a></li>
<li title="gethostbyaddr-2"><a href="inet_res.html#gethostbyaddr-2">gethostbyaddr/2</a></li>
<li title="gethostbyname-1"><a href="inet_res.html#gethostbyname-1">gethostbyname/1</a></li>
<li title="gethostbyname-2"><a href="inet_res.html#gethostbyname-2">gethostbyname/2</a></li>
<li title="gethostbyname-3"><a href="inet_res.html#gethostbyname-3">gethostbyname/3</a></li>
<li title="lookup-3"><a href="inet_res.html#lookup-3">lookup/3</a></li>
<li title="lookup-4"><a href="inet_res.html#lookup-4">lookup/4</a></li>
<li title="lookup-5"><a href="inet_res.html#lookup-5">lookup/5</a></li>
<li title="resolve-3"><a href="inet_res.html#resolve-3">resolve/3</a></li>
<li title="resolve-4"><a href="inet_res.html#resolve-4">resolve/4</a></li>
<li title="resolve-5"><a href="inet_res.html#resolve-5">resolve/5</a></li>
<li title="nslookup-3"><a href="inet_res.html#nslookup-3">nslookup/3</a></li>
<li title="nslookup-4"><a href="inet_res.html#nslookup-4">nslookup/4</a></li>
<li title="nnslookup-4"><a href="inet_res.html#nnslookup-4">nnslookup/4</a></li>
<li title="nnslookup-5"><a href="inet_res.html#nnslookup-5">nnslookup/5</a></li>
</ul>
</li>
<li title="init"><a href="init.html">init</a></li>
<li id="no" title="net_adm " expanded="false">net_adm<ul>
<li><a href="net_adm.html">
                  Top of manual page
                </a></li>
<li title="dns_hostname-1"><a href="net_adm.html#dns_hostname-1">dns_hostname/1</a></li>
<li title="host_file-0"><a href="net_adm.html#host_file-0">host_file/0</a></li>
<li title="localhost-0"><a href="net_adm.html#localhost-0">localhost/0</a></li>
<li title="names-0"><a href="net_adm.html#names-0">names/0</a></li>
<li title="names-1"><a href="net_adm.html#names-1">names/1</a></li>
<li title="ping-1"><a href="net_adm.html#ping-1">ping/1</a></li>
<li title="world-0"><a href="net_adm.html#world-0">world/0</a></li>
<li title="world-1"><a href="net_adm.html#world-1">world/1</a></li>
<li title="world_list-1"><a href="net_adm.html#world_list-1">world_list/1</a></li>
<li title="world_list-2"><a href="net_adm.html#world_list-2">world_list/2</a></li>
</ul>
</li>
<li id="no" title="net_kernel " expanded="false">net_kernel<ul>
<li><a href="net_kernel.html">
                  Top of manual page
                </a></li>
<li title="allow-1"><a href="net_kernel.html#allow-1">allow/1</a></li>
<li title="connect_node-1"><a href="net_kernel.html#connect_node-1">connect_node/1</a></li>
<li title="monitor_nodes-1"><a href="net_kernel.html#monitor_nodes-1">monitor_nodes/1</a></li>
<li title="monitor_nodes-2"><a href="net_kernel.html#monitor_nodes-2">monitor_nodes/2</a></li>
<li title="get_net_ticktime-0"><a href="net_kernel.html#get_net_ticktime-0">get_net_ticktime/0</a></li>
<li title="set_net_ticktime-1"><a href="net_kernel.html#set_net_ticktime-1">set_net_ticktime/1</a></li>
<li title="set_net_ticktime-2"><a href="net_kernel.html#set_net_ticktime-2">set_net_ticktime/2</a></li>
<li title="start-1"><a href="net_kernel.html#start-1">start/1</a></li>
<li title="start-1"><a href="net_kernel.html#start-1">start/1</a></li>
<li title="start-1"><a href="net_kernel.html#start-1">start/1</a></li>
<li title="stop-0"><a href="net_kernel.html#stop-0">stop/0</a></li>
</ul>
</li>
<li id="no" title="os " expanded="false">os<ul>
<li><a href="os.html">
                  Top of manual page
                </a></li>
<li title="cmd-1"><a href="os.html#cmd-1">cmd/1</a></li>
<li title="find_executable-1"><a href="os.html#find_executable-1">find_executable/1</a></li>
<li title="find_executable-2"><a href="os.html#find_executable-2">find_executable/2</a></li>
<li title="getenv-0"><a href="os.html#getenv-0">getenv/0</a></li>
<li title="getenv-1"><a href="os.html#getenv-1">getenv/1</a></li>
<li title="getpid-0"><a href="os.html#getpid-0">getpid/0</a></li>
<li title="putenv-2"><a href="os.html#putenv-2">putenv/2</a></li>
<li title="timestamp-0"><a href="os.html#timestamp-0">timestamp/0</a></li>
<li title="type-0"><a href="os.html#type-0">type/0</a></li>
<li title="version-0"><a href="os.html#version-0">version/0</a></li>
</ul>
</li>
<li id="no" title="pg2 " expanded="false">pg2<ul>
<li><a href="pg2.html">
                  Top of manual page
                </a></li>
<li title="create-1"><a href="pg2.html#create-1">create/1</a></li>
<li title="delete-1"><a href="pg2.html#delete-1">delete/1</a></li>
<li title="get_closest_pid-1"><a href="pg2.html#get_closest_pid-1">get_closest_pid/1</a></li>
<li title="get_members-1"><a href="pg2.html#get_members-1">get_members/1</a></li>
<li title="get_local_members-1"><a href="pg2.html#get_local_members-1">get_local_members/1</a></li>
<li title="join-2"><a href="pg2.html#join-2">join/2</a></li>
<li title="leave-2"><a href="pg2.html#leave-2">leave/2</a></li>
<li title="which_groups-0"><a href="pg2.html#which_groups-0">which_groups/0</a></li>
<li title="start-0"><a href="pg2.html#start-0">start/0</a></li>
<li title="start_link-0"><a href="pg2.html#start_link-0">start_link/0</a></li>
</ul>
</li>
<li id="no" title="rpc " expanded="false">rpc<ul>
<li><a href="rpc.html">
                  Top of manual page
                </a></li>
<li title="call-4"><a href="rpc.html#call-4">call/4</a></li>
<li title="call-5"><a href="rpc.html#call-5">call/5</a></li>
<li title="block_call-4"><a href="rpc.html#block_call-4">block_call/4</a></li>
<li title="block_call-5"><a href="rpc.html#block_call-5">block_call/5</a></li>
<li title="async_call-4"><a href="rpc.html#async_call-4">async_call/4</a></li>
<li title="yield-1"><a href="rpc.html#yield-1">yield/1</a></li>
<li title="nb_yield-1"><a href="rpc.html#nb_yield-1">nb_yield/1</a></li>
<li title="nb_yield-2"><a href="rpc.html#nb_yield-2">nb_yield/2</a></li>
<li title="multicall-3"><a href="rpc.html#multicall-3">multicall/3</a></li>
<li title="multicall-4"><a href="rpc.html#multicall-4">multicall/4</a></li>
<li title="multicall-5"><a href="rpc.html#multicall-5">multicall/5</a></li>
<li title="cast-4"><a href="rpc.html#cast-4">cast/4</a></li>
<li title="eval_everywhere-3"><a href="rpc.html#eval_everywhere-3">eval_everywhere/3</a></li>
<li title="eval_everywhere-4"><a href="rpc.html#eval_everywhere-4">eval_everywhere/4</a></li>
<li title="abcast-2"><a href="rpc.html#abcast-2">abcast/2</a></li>
<li title="abcast-3"><a href="rpc.html#abcast-3">abcast/3</a></li>
<li title="sbcast-2"><a href="rpc.html#sbcast-2">sbcast/2</a></li>
<li title="sbcast-3"><a href="rpc.html#sbcast-3">sbcast/3</a></li>
<li title="server_call-4"><a href="rpc.html#server_call-4">server_call/4</a></li>
<li title="multi_server_call-2"><a href="rpc.html#multi_server_call-2">multi_server_call/2</a></li>
<li title="multi_server_call-3"><a href="rpc.html#multi_server_call-3">multi_server_call/3</a></li>
<li title="safe_multi_server_call-2"><a href="rpc.html#safe_multi_server_call-2">safe_multi_server_call/2</a></li>
<li title="safe_multi_server_call-3"><a href="rpc.html#safe_multi_server_call-3">safe_multi_server_call/3</a></li>
<li title="parallel_eval-1"><a href="rpc.html#parallel_eval-1">parallel_eval/1</a></li>
<li title="pmap-3"><a href="rpc.html#pmap-3">pmap/3</a></li>
<li title="pinfo-1"><a href="rpc.html#pinfo-1">pinfo/1</a></li>
<li title="pinfo-2"><a href="rpc.html#pinfo-2">pinfo/2</a></li>
</ul>
</li>
<li id="no" title="seq_trace " expanded="false">seq_trace<ul>
<li><a href="seq_trace.html">
                  Top of manual page
                </a></li>
<li title="set_token-1"><a href="seq_trace.html#set_token-1">set_token/1</a></li>
<li title="set_token-2"><a href="seq_trace.html#set_token-2">set_token/2</a></li>
<li title="get_token-0"><a href="seq_trace.html#get_token-0">get_token/0</a></li>
<li title="get_token-1"><a href="seq_trace.html#get_token-1">get_token/1</a></li>
<li title="print-1"><a href="seq_trace.html#print-1">print/1</a></li>
<li title="print-2"><a href="seq_trace.html#print-2">print/2</a></li>
<li title="reset_trace-0"><a href="seq_trace.html#reset_trace-0">reset_trace/0</a></li>
<li title="set_system_tracer-1"><a href="seq_trace.html#set_system_tracer-1">set_system_tracer/1</a></li>
<li title="get_system_tracer-0"><a href="seq_trace.html#get_system_tracer-0">get_system_tracer/0</a></li>
</ul>
</li>
<li title="user"><a href="user.html">user</a></li>
<li id="no" title="wrap_log_reader " expanded="false">wrap_log_reader<ul>
<li><a href="wrap_log_reader.html">
                  Top of manual page
                </a></li>
<li title="chunk-1"><a href="wrap_log_reader.html#chunk-1">chunk/1</a></li>
<li title="chunk-2"><a href="wrap_log_reader.html#chunk-2">chunk/2</a></li>
<li title="close-1"><a href="wrap_log_reader.html#close-1">close/1</a></li>
<li title="open-1"><a href="wrap_log_reader.html#open-1">open/1</a></li>
<li title="open-2"><a href="wrap_log_reader.html#open-2">open/2</a></li>
</ul>
</li>
<li title="zlib"><a href="zlib.html">zlib</a></li>
<li title="app"><a href="app.html">app</a></li>
<li title="config"><a href="config.html">config</a></li>
<li title="packages"><a href="packages.html">packages</a></li>
</ul>
</div></div>
<div id="content">
<div class="innertube">
<!-- refpage --><center><h1>gen_tcp</h1></center>
  
  <h3>MODULE</h3>
<div class="REFBODY">gen_tcp</div>
  <h3>MODULE SUMMARY</h3>
<div class="REFBODY">Interface to TCP/IP sockets</div>
  <h3>DESCRIPTION</h3>
<div class="REFBODY"><p>
    <p>The <span class="code">gen_tcp</span> module provides functions for communicating
      with sockets using the TCP/IP protocol.</p>
    <p>The following code fragment provides a simple example of 
      a client connecting to a server at port 5678, transferring a
      binary and closing the connection:</p>
    <div class="example"><pre>
client() -&gt;
    SomeHostInNet = "localhost", % to make it runnable on one machine
    {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678, 
                                 [binary, {packet, 0}]),
    ok = gen_tcp:send(Sock, "Some Data"),
    ok = gen_tcp:close(Sock).</pre></div>
    <p>At the other end a server is listening on port 5678, accepts
      the connection and receives the binary:</p>
    <div class="example"><pre>
server() -&gt;
    {ok, LSock} = gen_tcp:listen(5678, [binary, {packet, 0}, 
                                        {active, false}]),
    {ok, Sock} = gen_tcp:accept(LSock),
    {ok, Bin} = do_recv(Sock, []),
    ok = gen_tcp:close(Sock),
    Bin.

do_recv(Sock, Bs) -&gt;
    case gen_tcp:recv(Sock, 0) of
        {ok, B} -&gt;
            do_recv(Sock, [Bs, B]);
        {error, closed} -&gt;
            {ok, list_to_binary(Bs)}
    end.</pre></div>
    <p>For more examples, see the <span class="bold_code"><a href="#examples">examples</a></span> section.</p>
  </p></div>

  <h3>DATA TYPES</h3>
    <p>
      <span class="bold_code"><a name="type-option">option()</a> = {active, true | false | once}<br>         | {buffer, integer() &gt;= 0}<br>         | {delay_send, boolean()}<br>         | {deliver, port | term}<br>         | {dontroute, boolean()}<br>         | {exit_on_close, boolean()}<br>         | {header, integer() &gt;= 0}<br>         | {high_watermark, integer() &gt;= 0}<br>         | {keepalive, boolean()}<br>         | {linger, {boolean(), integer() &gt;= 0}}<br>         | {low_watermark, integer() &gt;= 0}<br>         | {mode, list | binary}<br>         | list<br>         | binary<br>         | {nodelay, boolean()}<br>         | {packet,<br>            0 |<br>            1 |<br>            2 |<br>            4 |<br>            raw |<br>            sunrm |<br>            asn1 |<br>            cdr |<br>            fcgi |<br>            line |<br>            tpkt |<br>            http |<br>            httph |<br>            http_bin |<br>            httph_bin}<br>         | {packet_size, integer() &gt;= 0}<br>         | {priority, integer() &gt;= 0}<br>         | {raw,<br>            Protocol :: integer() &gt;= 0,<br>            OptionNum :: integer() &gt;= 0,<br>            ValueBin :: binary()}<br>         | {recbuf, integer() &gt;= 0}<br>         | {reuseaddr, boolean()}<br>         | {send_timeout, integer() &gt;= 0 | infinity}<br>         | {send_timeout_close, boolean()}<br>         | {sndbuf, integer() &gt;= 0}<br>         | {tos, integer() &gt;= 0}</span><br></p>
    <p>
      <span class="bold_code"><a name="type-option_name">option_name()</a> = active<br>              | buffer<br>              | delay_send<br>              | deliver<br>              | dontroute<br>              | exit_on_close<br>              | header<br>              | high_watermark<br>              | keepalive<br>              | linger<br>              | low_watermark<br>              | mode<br>              | nodelay<br>              | packet<br>              | packet_size<br>              | priority<br>              | {raw,<br>                 Protocol :: integer() &gt;= 0,<br>                 OptionNum :: integer() &gt;= 0,<br>                 ValueSpec :: (ValueSize :: integer() &gt;= 0)<br>                            | (ValueBin :: binary())}<br>              | recbuf<br>              | reuseaddr<br>              | send_timeout<br>              | send_timeout_close<br>              | sndbuf<br>              | tos</span><br></p>
    <p>
      <span class="bold_code"><a name="type-connect_option">connect_option()</a> = {ip, <span class="bold_code"><a href="inet.html#type-ip_address">inet:ip_address()</a></span>}<br>                 | {fd, Fd :: integer() &gt;= 0}<br>                 | {ifaddr, <span class="bold_code"><a href="inet.html#type-ip_address">inet:ip_address()</a></span>}<br>                 | <span class="bold_code"><a href="inet.html#type-address_family">inet:address_family()</a></span><br>                 | {port, <span class="bold_code"><a href="inet.html#type-port_number">inet:port_number()</a></span>}<br>                 | {tcp_module, module()}<br>                 | <span class="bold_code"><a href="#type-option">option()</a></span></span><br></p>
    <p>
      <span class="bold_code"><a name="type-listen_option">listen_option()</a> = {ip, <span class="bold_code"><a href="inet.html#type-ip_address">inet:ip_address()</a></span>}<br>                | {fd, Fd :: integer() &gt;= 0}<br>                | {ifaddr, <span class="bold_code"><a href="inet.html#type-ip_address">inet:ip_address()</a></span>}<br>                | <span class="bold_code"><a href="inet.html#type-address_family">inet:address_family()</a></span><br>                | {port, <span class="bold_code"><a href="inet.html#type-port_number">inet:port_number()</a></span>}<br>                | {backlog, B :: integer() &gt;= 0}<br>                | {tcp_module, module()}<br>                | <span class="bold_code"><a href="#type-option">option()</a></span></span><br></p>
    <p><span class="bold_code"><a name="type-socket">socket()</a></span></p>
<div class="REFBODY"><p>
        <p>As returned by accept/1,2 and connect/3,4.</p>
        <a name="connect"></a>
      </p></div>
  

  <h3>EXPORTS</h3>
    <p><a name="connect-3"></a><span class="bold_code">connect(Address, Port, Options) -&gt; {ok, Socket} | {error, Reason}</span><br><a name="connect-4"></a><span class="bold_code">connect(Address, Port, Options, Timeout) -&gt;<br>           {ok, Socket} | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Address = <span class="bold_code"><a href="inet.html#type-ip_address">inet:ip_address()</a></span> | <span class="bold_code"><a href="inet.html#type-hostname">inet:hostname()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Port = <span class="bold_code"><a href="inet.html#type-port_number">inet:port_number()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Options = [<span class="bold_code"><a href="#type-connect_option">connect_option()</a></span>]</span></div>
<div class="REFTYPES"><span class="bold_code">Timeout = timeout()</span></div>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Reason = <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Connects to a server on TCP port <span class="code">Port</span> on the host
          with IP address <span class="code">Address</span>. The <span class="code">Address</span> argument
          can be either a hostname, or an IP address.</p>
        <p>The available options are:</p>
        <dl>
         <dt><strong><span class="code">{ip, ip_address()}</span></strong></dt>
          <dd>
            <p>If the host has several network interfaces, this option
              specifies which one to use.</p>
          </dd>

		  <dt><strong><span class="code">{ifaddr, ip_address()}</span></strong></dt>
          <dd>
			  <p>Same as <span class="code">{ip, ip_address()}</span>. If the host has several network interfaces, this option
              specifies which one to use.</p>
		  </dd>

          <dt><strong><span class="code">{fd, integer() &gt;= 0}</span></strong></dt>
          <dd>
            <p>If a socket has somehow been connected without using
              <span class="code">gen_tcp</span>, use this option to pass the file
              descriptor for it.</p>
          </dd>

          <dt><strong><span class="code">inet</span></strong></dt>
          <dd>
            <p>Set up the socket for IPv4.</p>
          </dd>

		  <dt><strong><span class="code">inet6</span></strong></dt>
		  <dd>
            <p>Set up the socket for IPv6.</p>
          </dd>

          <dt><strong><span class="code">{port, Port}</span></strong></dt>
          <dd>
            <p>Specify which local port number to use.</p>
          </dd>

		  <dt><strong><span class="code">{tcp_module, module()}</span></strong></dt>
		  <dd> <p>
				  Override which callback module is used. Defaults to
				  <span class="code">inet_tcp</span> for IPv4 and <span class="code">inet6_tcp</span> for IPv6.
			  </p>
		  </dd>

          <dt><strong><span class="code">Opt</span></strong></dt>
          <dd>
            <p>See
              <span class="bold_code"><a href="inet.html#setopts-2">inet:setopts/2</a></span>.</p>
          </dd>
        </dl>
        <p>Packets can be sent to the returned socket <span class="code">Socket</span>
          using <span class="code">send/2</span>. Packets sent from the peer are delivered
          as messages:</p>
        <div class="example"><pre>
{tcp, Socket, Data}</pre></div>
        <p>If the socket is closed, the following message is delivered:</p>
        <div class="example"><pre>
{tcp_closed, Socket}</pre></div>
        <p>If an error occurs on the socket, the following message is
          delivered:</p>
        <div class="example"><pre>
{tcp_error, Socket, Reason}</pre></div>
        <p>unless <span class="code">{active, false}</span> is specified in the option list
          for the socket, in which case packets are retrieved by
          calling <span class="code">recv/2</span>.</p>
        <p>The optional <span class="code">Timeout</span> parameter specifies a timeout in
          milliseconds. The default value is <span class="code">infinity</span>.</p>
        <div class="note">
<div class="label">Note</div>
<div class="content"><p>
          <p>The default values for options given to <span class="code">connect</span> can
            be affected by the Kernel configuration parameter
            <span class="code">inet_default_connect_options</span>. See
            <span class="bold_code"><a href="inet.html">inet(3)</a></span> for details.</p>
        </p></div>
</div>
      </p></div>
    <p><a name="listen-2"></a><span class="bold_code">listen(Port, Options) -&gt; {ok, ListenSocket} | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Port = <span class="bold_code"><a href="inet.html#type-port_number">inet:port_number()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Options = [<span class="bold_code"><a href="#type-listen_option">listen_option()</a></span>]</span></div>
<div class="REFTYPES"><span class="bold_code">ListenSocket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Reason = system_limit | <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Sets up a socket to listen on the port <span class="code">Port</span> on
          the local host.</p>
        <p>If <span class="code">Port == 0</span>, the underlying OS assigns an available
          port number, use <span class="code">inet:port/1</span> to retrieve it.</p>
        <p>The available options are:</p>
        <dl>
          <dt><strong><span class="code">list</span></strong></dt>
          <dd>
            <p>Received <span class="code">Packet</span> is delivered as a list.</p>
          </dd>
          <dt><strong><span class="code">binary</span></strong></dt>
          <dd>
            <p>Received <span class="code">Packet</span> is delivered as a binary.</p>
          </dd>
          <dt><strong><span class="code">{backlog, B}</span></strong></dt>
          <dd>
            <p><span class="code">B</span> is an integer &gt;= 0. The backlog value defaults
              to 5. The backlog value defines the maximum length that
              the queue of pending connections may grow to.</p>
          </dd>
          <dt><strong><span class="code">{ip, ip_address()}</span></strong></dt>
          <dd>
            <p>If the host has several network interfaces, this option
              specifies which one to listen on.</p>
          </dd>
          <dt><strong><span class="code">{port, Port}</span></strong></dt>
          <dd>
            <p>Specify which local port number to use.</p>
          </dd>
          <dt><strong><span class="code">{fd, Fd}</span></strong></dt>
          <dd>
            <p>If a socket has somehow been connected without using
              <span class="code">gen_tcp</span>, use this option to pass the file
              descriptor for it.</p>
          </dd>

		  <dt><strong><span class="code">{ifaddr, ip_address()}</span></strong></dt>
          <dd>
			  <p>Same as <span class="code">{ip, ip_address()}</span>. If the host has several network interfaces, this option
              specifies which one to use.</p>
		  </dd>

          <dt><strong><span class="code">inet6</span></strong></dt>
          <dd>
            <p>Set up the socket for IPv6.</p>
          </dd>
          <dt><strong><span class="code">inet</span></strong></dt>
          <dd>
            <p>Set up the socket for IPv4.</p>
          </dd>

		  <dt><strong><span class="code">{tcp_module, module()}</span></strong></dt>
		  <dd> <p>
				  Override which callback module is used. Defaults to
				  <span class="code">inet_tcp</span> for IPv4 and <span class="code">inet6_tcp</span> for IPv6.
			  </p>
		  </dd>

          <dt><strong><span class="code">Opt</span></strong></dt>
          <dd>
            <p>See
              <span class="bold_code"><a href="inet.html#setopts-2">inet:setopts/2</a></span>.</p>
          </dd>
        </dl>
        <p>The returned socket <span class="code">ListenSocket</span> can only be used in
          calls to <span class="code">accept/1,2</span>.</p>
        <div class="note">
<div class="label">Note</div>
<div class="content"><p>
          <p>The default values for options given to <span class="code">listen</span> can
            be affected by the Kernel configuration parameter
            <span class="code">inet_default_listen_options</span>. See
            <span class="bold_code"><a href="inet.html">inet(3)</a></span> for details.</p>
        </p></div>
</div>
      </p></div>
    <p><a name="accept-1"></a><span class="bold_code">accept(ListenSocket) -&gt; {ok, Socket} | {error, Reason}</span><br><a name="accept-2"></a><span class="bold_code">accept(ListenSocket, Timeout) -&gt; {ok, Socket} | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">ListenSocket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFBODY">Returned by <span class="code">listen/2</span>.
      </div>
<div class="REFTYPES"><span class="bold_code">Timeout = timeout()</span></div>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Reason = closed | timeout | system_limit | <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Accepts an incoming connection request on a listen socket.
          <span class="code">Socket</span> must be a socket returned from <span class="code">listen/2</span>.
          <span class="code">Timeout</span> specifies a timeout value in ms, defaults to
          <span class="code">infinity</span>.</p>
        <p>Returns <span class="code">{ok, Socket}</span> if a connection is established,
          or <span class="code">{error, closed}</span> if <span class="code">ListenSocket</span> is closed,
          or <span class="code">{error, timeout}</span> if no connection is established
          within the specified time,
          or <span class="code">{error, system_limit}</span> if all available ports in the
          Erlang emulator are in use. May also return a POSIX error
          value if something else goes wrong, see inet(3) for possible
          error values.</p>
        <p>Packets can be sent to the returned socket <span class="code">Socket</span>
          using <span class="code">send/2</span>. Packets sent from the peer are delivered
          as messages:</p>
        <div class="example"><pre>
{tcp, Socket, Data}</pre></div>
        <p>unless <span class="code">{active, false}</span> was specified in the option
          list for the listen socket, in which case packets are
          retrieved by calling <span class="code">recv/2</span>.</p>
        <div class="note">
<div class="label">Note</div>
<div class="content"><p>
          <p>It is worth noting that the <span class="code">accept</span> call does
            <strong>not</strong> have to be issued from the socket owner
            process. Using version 5.5.3 and higher of the emulator,
            multiple simultaneous accept calls can be issued from
            different processes, which allows for a pool of acceptor
            processes handling incoming connections.</p>
        </p></div>
</div>
      </p></div>
    <p><a name="send-2"></a><span class="bold_code">send(Socket, Packet) -&gt; ok | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Packet = iodata()</span></div>
<div class="REFTYPES"><span class="bold_code">Reason = <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Sends a packet on a socket. </p>
        <p>There is no <span class="code">send</span> call with timeout option, you use the
          <span class="code">send_timeout</span> socket option if timeouts are
          desired.  See the <span class="bold_code"><a href="#examples">examples</a></span> section.</p>
      </p></div>
    <p><a name="recv-2"></a><span class="bold_code">recv(Socket, Length) -&gt; {ok, Packet} | {error, Reason}</span><br><a name="recv-3"></a><span class="bold_code">recv(Socket, Length, Timeout) -&gt; {ok, Packet} | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Length = integer() &gt;= 0</span></div>
<div class="REFTYPES"><span class="bold_code">Timeout = timeout()</span></div>
<div class="REFTYPES"><span class="bold_code">Packet = string() | binary() | HttpPacket</span></div>
<div class="REFTYPES"><span class="bold_code">Reason = closed | <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">HttpPacket = term()</span></div>
<div class="REFBODY">See the description of
         <span class="code">HttpPacket</span> in <span class="bold_code"><a href="javascript:erlhref('../../../../doc/../','erts','erlang.html#decode_packet-3');">
         erlang:decode_packet/3</a></span>.
      </div>
</div></p>
<div class="REFBODY"><p>
        <p>This function receives a packet from a socket in passive
          mode. A closed socket is indicated by a return value
          <span class="code">{error, closed}</span>.</p>
        <p>The <span class="code">Length</span> argument is only meaningful when
          the socket is in <span class="code">raw</span> mode and denotes the number of
          bytes to read. If <span class="code">Length</span> = 0, all available bytes are
          returned. If <span class="code">Length</span> &gt; 0, exactly <span class="code">Length</span>
          bytes are returned, or an error; possibly discarding less
          than <span class="code">Length</span> bytes of data when the socket gets closed
          from the other side.</p>
        <p>The optional <span class="code">Timeout</span> parameter specifies a timeout in
          milliseconds. The default value is <span class="code">infinity</span>.</p>
      </p></div>
    <p><a name="controlling_process-2"></a><span class="bold_code">controlling_process(Socket, Pid) -&gt; ok | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">Pid = pid()</span></div>
<div class="REFTYPES"><span class="bold_code">Reason = closed | not_owner | <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Assigns a new controlling process <span class="code">Pid</span> to
          <span class="code">Socket</span>. The controlling process is the process which
          receives messages from the socket. If called by any other
          process than the current controlling process,
          <span class="code">{error, not_owner}</span> is returned.</p>
      </p></div>
    <p><a name="close-1"></a><span class="bold_code">close(Socket) -&gt; ok</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Closes a TCP socket.</p>
      </p></div>
    <p><a name="shutdown-2"></a><span class="bold_code">shutdown(Socket, How) -&gt; ok | {error, Reason}</span><br><div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES"><span class="bold_code">Socket = <span class="bold_code"><a href="#type-socket">socket()</a></span></span></div>
<div class="REFTYPES"><span class="bold_code">How = read | write | read_write</span></div>
<div class="REFTYPES"><span class="bold_code">Reason = <span class="bold_code"><a href="inet.html#type-posix">inet:posix()</a></span></span></div>
</div></p>
<div class="REFBODY"><p>
        <p>Immediately close a socket in one or two directions.</p>
        <p><span class="code">How == write</span> means closing the socket for writing,
          reading from it is still possible.</p>
        <p>To be able to handle that the peer has done a shutdown on
          the write side, the <span class="code">{exit_on_close, false}</span> option
          is useful.</p>
      </p></div>
  

  <h3><a name="id120707">Examples</a></h3>
<div class="REFBODY">
    
    <a name="examples"></a>
    <p>The following example illustrates usage of the {active,once}
      option and multiple accepts by implementing a server as a
      number of worker processes doing accept on one single listen
      socket. The start/2 function takes the number of worker
      processes as well as a port number to listen for incoming
      connections on. If <span class="code">LPort</span> is specified as <span class="code">0</span>, an
      ephemeral portnumber is used, why the start function returns
      the actual portnumber allocated:</p>
    <div class="example"><pre>
start(Num,LPort) -&gt;
    case gen_tcp:listen(LPort,[{active, false},{packet,2}]) of
        {ok, ListenSock} -&gt;
            start_servers(Num,ListenSock),
            {ok, Port} = inet:port(ListenSock),
            Port;
        {error,Reason} -&gt;
            {error,Reason}
    end.

start_servers(0,_) -&gt;
    ok;
start_servers(Num,LS) -&gt;
    spawn(?MODULE,server,[LS]),
    start_servers(Num-1,LS).

server(LS) -&gt;
    case gen_tcp:accept(LS) of
        {ok,S} -&gt;
            loop(S),
            server(LS);
        Other -&gt;
            io:format("accept returned ~w - goodbye!~n",[Other]),
            ok
    end.

loop(S) -&gt;
    inet:setopts(S,[{active,once}]),
    receive
        {tcp,S,Data} -&gt;
            Answer = process(Data), % Not implemented in this example
            gen_tcp:send(S,Answer),
            loop(S);
        {tcp_closed,S} -&gt;
            io:format("Socket ~w closed [~w]~n",[S,self()]),
            ok
    end.</pre></div>
    <p>A simple client could look like this:</p>
    <div class="example"><pre>
client(PortNo,Message) -&gt;
    {ok,Sock} = gen_tcp:connect("localhost",PortNo,[{active,false},
                                                    {packet,2}]),
    gen_tcp:send(Sock,Message),
    A = gen_tcp:recv(Sock,0),
    gen_tcp:close(Sock),
    A.</pre></div>
    <p>The fact that the <span class="code">send</span> call does not accept a timeout
      option, is because timeouts on send is handled through the socket
      option <span class="code">send_timeout</span>. The behavior of a send operation with
      no receiver is in a very high degree defined by the underlying TCP
      stack, as well as the network infrastructure. If one wants to write
      code that handles a hanging receiver that might eventually cause
      the sender to hang on a <span class="code">send</span> call, one writes code like
      the following.</p>
    <p>Consider a process that receives data from a client process that
      is to be forwarded to a server on the network. The process has
      connected to the server via TCP/IP and does not get any acknowledge
      for each message it sends, but has to rely on the send timeout
      option to detect that the other end is unresponsive. We could use
      the <span class="code">send_timeout</span> option when connecting:</p>
    <div class="example"><pre>
    ...
    {ok,Sock} = gen_tcp:connect(HostAddress, Port,
                                [{active,false},
                                 {send_timeout, 5000},
                                 {packet,2}]),
                    loop(Sock), % See below
    ...    </pre></div>
    <p>In the loop where requests are handled, we can now detect send
      timeouts:</p>
    <div class="example"><pre>
loop(Sock) -&gt;
    receive
        {Client, send_data, Binary} -&gt;
            case gen_tcp:send(Sock,[Binary]) of
                {error, timeout} -&gt;
                    io:format("Send timeout, closing!~n",
                              []),
                    handle_send_timeout(), % Not implemented here
                    Client ! {self(),{error_sending, timeout}},
                    %% Usually, it's a good idea to give up in case of a 
                    %% send timeout, as you never know how much actually 
                    %% reached the server, maybe only a packet header?!
                    gen_tcp:close(Sock);
                {error, OtherSendError} -&gt;
                    io:format("Some other error on socket (~p), closing",
                              [OtherSendError]),
                    Client ! {self(),{error_sending, OtherSendError}},
                    gen_tcp:close(Sock);
                ok -&gt;
                    Client ! {self(), data_sent},
                    loop(Sock)
            end
    end.    </pre></div>
    <p>Usually it would suffice to detect timeouts on receive, as most
      protocols include some sort of acknowledgment from the server,
      but if the protocol is strictly one way, the <span class="code">send_timeout</span>
      option comes in handy!</p>
  </div>
</div>
<div class="footer">
<hr>
<p>Copyright © 1997-2012 Ericsson AB. All Rights Reserved.</p>
</div>
</div>
</div></body>
</html>