{"id":5220,"date":"2024-03-14T02:32:40","date_gmt":"2024-03-14T02:32:40","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/"},"modified":"2025-08-01T12:19:10","modified_gmt":"2025-08-01T12:19:10","slug":"how-to-use-socketpair-in-the-c-language","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/","title":{"rendered":"C socketpair Tutorial: Usage Guide"},"content":{"rendered":"<p>In C language, the socketpair function can be used to create a pair of interconnected sockets. These sockets can be used for communication within the same process. Here is how to use the socketpair function:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;sys\/socket.h&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-type\">int<\/span> <span class=\"hljs-title function_\">socketpair<\/span><span class=\"hljs-params\">(<span class=\"hljs-type\">int<\/span> domain, <span class=\"hljs-type\">int<\/span> type, <span class=\"hljs-type\">int<\/span> protocol, <span class=\"hljs-type\">int<\/span> sv[<span class=\"hljs-number\">2<\/span>])<\/span>;\r\n<\/code><\/pre>\n<ol>\n<li>Domain: specifies the protocol family (such as AF_UNIX or AF_INET).<\/li>\n<li>Specify the type of socket (such as SOCK_STREAM or SOCK_DGRAM).<\/li>\n<li>Protocol: Specifies the type of protocol (usually 0).<\/li>\n<li>An integer array used to store the file descriptors of a pair of sockets that have been created.<\/li>\n<\/ol>\n<p>After calling the socketpair function, two interconnected sockets will be created that can be used for communication within the process. The first element of the sv array stores the file descriptor of the first socket, while the second element stores the file descriptor of the second socket.<\/p>\n<p>Here is a simple example program demonstrating the use of the socketpair function.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;stdio.h&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;sys\/types.h&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;sys\/socket.h&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;unistd.h&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-type\">int<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">()<\/span> {\r\n    <span class=\"hljs-type\">int<\/span> sv[<span class=\"hljs-number\">2<\/span>];\r\n    <span class=\"hljs-keyword\">if<\/span> (socketpair(AF_UNIX, SOCK_STREAM, <span class=\"hljs-number\">0<\/span>, sv) &lt; <span class=\"hljs-number\">0<\/span>) {\r\n        perror(<span class=\"hljs-string\">\"socketpair\"<\/span>);\r\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">1<\/span>;\r\n    }\r\n\r\n    <span class=\"hljs-type\">char<\/span> buf[<span class=\"hljs-number\">256<\/span>];\r\n    <span class=\"hljs-keyword\">if<\/span> (fork() == <span class=\"hljs-number\">0<\/span>) {\r\n        close(sv[<span class=\"hljs-number\">1<\/span>]); <span class=\"hljs-comment\">\/\/ \u5173\u95ed\u7236\u8fdb\u7a0b\u7684\u5957\u63a5\u5b57<\/span>\r\n        read(sv[<span class=\"hljs-number\">0<\/span>], buf, <span class=\"hljs-keyword\">sizeof<\/span>(buf));\r\n        <span class=\"hljs-built_in\">printf<\/span>(<span class=\"hljs-string\">\"Child received message: %s\\n\"<\/span>, buf);\r\n        close(sv[<span class=\"hljs-number\">0<\/span>]);\r\n    } <span class=\"hljs-keyword\">else<\/span> {\r\n        close(sv[<span class=\"hljs-number\">0<\/span>]); <span class=\"hljs-comment\">\/\/ \u5173\u95ed\u5b50\u8fdb\u7a0b\u7684\u5957\u63a5\u5b57<\/span>\r\n        write(sv[<span class=\"hljs-number\">1<\/span>], <span class=\"hljs-string\">\"Hello from parent\"<\/span>, <span class=\"hljs-number\">18<\/span>);\r\n        close(sv[<span class=\"hljs-number\">1<\/span>]);\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>In the example above, a pair of sockets is first created using the socketpair function. Then a child process is created using the fork function, and communication is established between the parent and child processes. The parent process sends a message to the child process, which then prints it out upon receiving. Lastly, all socket file descriptors are closed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C language, the socketpair function can be used to create a pair of interconnected sockets. These sockets can be used for communication within the same process. Here is how to use the socketpair function: #include &lt;sys\/socket.h&gt; int socketpair(int domain, int type, int protocol, int sv[2]); Domain: specifies the protocol family (such as AF_UNIX or [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[5620,381,5621,5619,5622],"class_list":["post-5220","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-c-sockets","tag-c-programming","tag-ipc","tag-socketpair","tag-unix-sockets"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C socketpair Tutorial: Usage Guide - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C socketpair Tutorial: Usage Guide\" \/>\n<meta property=\"og:description\" content=\"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-14T02:32:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-01T12:19:10+00:00\" \/>\n<meta name=\"author\" content=\"Olivia Parker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivia Parker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\"},\"author\":{\"name\":\"Olivia Parker\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\"},\"headline\":\"C socketpair Tutorial: Usage Guide\",\"datePublished\":\"2024-03-14T02:32:40+00:00\",\"dateModified\":\"2025-08-01T12:19:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\"},\"wordCount\":208,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"C sockets\",\"C++ Programming\",\"IPC\",\"socketpair\",\"Unix sockets\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\",\"name\":\"C socketpair Tutorial: Usage Guide - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-14T02:32:40+00:00\",\"dateModified\":\"2025-08-01T12:19:10+00:00\",\"description\":\"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C socketpair Tutorial: Usage Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\",\"name\":\"Olivia Parker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"caption\":\"Olivia Parker\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C socketpair Tutorial: Usage Guide - Blog - Silicon Cloud","description":"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/","og_locale":"en_US","og_type":"article","og_title":"C socketpair Tutorial: Usage Guide","og_description":"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-14T02:32:40+00:00","article_modified_time":"2025-08-01T12:19:10+00:00","author":"Olivia Parker","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Olivia Parker","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/"},"author":{"name":"Olivia Parker","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9"},"headline":"C socketpair Tutorial: Usage Guide","datePublished":"2024-03-14T02:32:40+00:00","dateModified":"2025-08-01T12:19:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/"},"wordCount":208,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["C sockets","C++ Programming","IPC","socketpair","Unix sockets"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/","name":"C socketpair Tutorial: Usage Guide - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-14T02:32:40+00:00","dateModified":"2025-08-01T12:19:10+00:00","description":"Learn how to use socketpair in C for inter-process communication. Complete tutorial with function parameters and examples.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-socketpair-in-the-c-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"C socketpair Tutorial: Usage Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9","name":"Olivia Parker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","caption":"Olivia Parker"},"url":"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/5220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=5220"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/5220\/revisions"}],"predecessor-version":[{"id":149961,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/5220\/revisions\/149961"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=5220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=5220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=5220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}