c++/c socket應用的區別:socket()函式返回檔案描述符fd總是0的問題
最近在arm linux系統上面使用socket建立客戶端到伺服器的連線,
客戶端需要開2個socket連線2個不同的伺服器,
這兩個申請socket的過程都放在同一個類的成員函式中實現,
測試發現,每次拿到的socket的fd均為0。
這個id為0,雖然用起來沒有問題,但是隻能用來connect到一個伺服器,除非你每次收發之前都來個connect。
同樣的程式碼,放在.c檔案的main函式裡面一執行,拿到的socket id為非0。
具體原因仍然不知。
目前解決的辦法是,在c++類裡面執行socket函式,申請2次,第二次拿到的就是非0的了,
然後把第一次的0關閉,不用了。
不知道是否哪裡設定不對,難道預設是共用fd=0嗎?
:]
相關推薦
c++/c socket應用的區別:socket()函式返回檔案描述符fd總是0的問題
最近在arm linux系統上面使用socket建立客戶端到伺服器的連線, 客戶端需要開2個socket連線2個不同的伺服器, 這兩個申請socket的過程都放在同一個類的成員函式中實現, 測試發現,每次拿到的socket的fd均為0。 這個id為0,雖然用起來沒有問題,但
Linux:基礎IO(檔案描述符分配規則)(重定向)(inode)(軟硬連結)(動態庫靜態庫)
目錄 檔案描述符的分配規則 重定向原理 FILE 總結 理解檔案系統 inode是什麼 inode內容 硬連結 軟連結 軟硬連結區別: 動態庫和靜態庫 如何生成自己的動態庫和靜態庫 如何連結一個庫生成可執行程式 檔案描述符的分配規則 最
檔案描述符fd和檔案指標File* fp的區別和轉換
在linux系統中把裝置和普通檔案也都看做是檔案,要對檔案進行操作就必須先開啟檔案,開啟檔案後會得到一個檔案描述符,它是一個很小的正整數,是一個索引值。 核心會為每一個執行中的程序在程序控制塊pcb中維護一個開啟檔案的記錄表,每一個表項都有一個指標指
select函式及檔案描述符集的使用
轉載至:http://blog.csdn.net/zjf82031913/article/details/5617031Select在Socket程式設計中還是比較重要的,可是對於初學Socket的人來說都不太愛用Select寫程式,他們只是習慣寫諸如connect、acce
C++順序表應用3:元素位置互換之移位演算法(好好看著函式名!!)要不然就會 undefined reference to `build_table(Table&, int, int)'
順序表應用3:元素位置互換之移位演算法 Time Limit: 1000 ms Memory Limit: 570 KiB Problem Description 一個長度為len(1<=len<=1000000)的順序表,資料元素的型別為整型,將該表分
Effective C++筆記之十五:inline函式的裡裡外外
1.inline函式簡介 inline函式是由inline關鍵字來定義,引入inline函式的主要原因是用它替代C中複雜易錯不易維護的巨集函式。 2.編譯器對inline函式的處理辦法 inline對於編譯器而言,在編譯階段完成對inline函式的處理。將呼叫動作替換為函式的本體。但是它只是一種
C語言面向物件程式設計:虛擬函式與多型(3)
在《 C++ 程式設計思想》一書中對虛擬函式的實現機制有詳細的描述,一般的編譯器通過虛擬函式表,在編譯時插入一段隱藏的程式碼,儲存型別資訊和虛擬函式地址,而在呼叫時,這段隱藏的程式碼可以找到和實際物件一致的虛擬函式實現。 我們在這裡提供
C# 委託的應用1:將方法作為引數傳遞給另一個方法
長期以來,c和c++的程式設計師利用方法指標,將方法作為引數傳給另一個方法。c#使用委託來提供相同的功能,它將方法作為物件封裝起來,允許在執行時間接地繫結一個方法呼叫。 下面將通過氣泡排序的例子講解委託的產生 示例1 :該方法對一個整數陣列執行升
C++程式設計規範之20:避免函式過長,避免巢狀過深
摘要: 短勝於長,平勝於優,過長的函式和巢狀過深的程式碼塊的出現,經常是因為沒能賦予一個函式以一個緊湊的職責所致,這兩種情況通常都能夠通過更好的重構予以解決。 每個函式都應該顧其名而能知其義,易於理解的工作單元。如果於此相反,函式試圖將多個這樣的小概念合併到
C++函式返回值介紹(含return 0 與 return 1 與 return -1介紹)
很多人在學習C++ 的過程中應該會留意到返回值的問題,特別是習慣用:int main() 的猿類同伴們。我們需要在函式結尾寫個返回值。 int main(){ return 0; } 接下來就給大家簡單介紹一下返回值。 一、返回值型別 C++函式可以返回多種型
linux weblogic Multicast socket receive error :Socket closed
一、環境資訊: 系統:CentOS 6.5 linux 32位 uname -a 命令檢視:Linux master 2.6.32-220.el6.i686 #1 SMP Tue Dec 6 16:15:40 GMT 2011 i686 i686 i386 GNU/Li
吳恩達機器學習筆記 —— 19 應用舉例:照片OCR(光學字符識別)
參考 https ocr 噪聲 也說 字符 www. 定位 cnblogs http://www.cnblogs.com/xing901022/p/9374258.html 本章講述的是一個復雜的機器學習系統,通過它可以看到機器學習的系統是如何組裝起來的;另外也說明了一
1定時器(springboot 和spring的區別: springboot的配置檔案不用配)
在Spring Boot中使用@Scheduled實現定時任務 之前沒有使用Spring Boot的Java風格配置的時候,用XML配置過@Scheduled定時任務,現在都習慣使用Java風格配置了,在此簡單記錄 一下Spring Boot的@Scheduled定時任務的實現過程。 1.
Linux:基礎IO(cIO庫函式詳細介紹)(IO系統呼叫介面詳細介紹)(兩者關係:檔案描述符和檔案指標)
目錄 c系統中的庫函式: fopen:開啟檔案 fclose:關閉檔案 fwrite:向檔案寫入一個數據塊 fread:讀寫 fprintf:格式化輸出到一個流/檔案中 fseek:移動/跳轉 到當前 讀取/寫入位置 fgets:獲取字串 fput:把字串寫入到指
Python 標準輸入輸出stdin stdout stderr 對照c解讀 為理解Linux的檔案描述符fileno做鋪墊
參考連結 詳解stdin,stdout,stderr 作者: 茶鹽耙 How to print to stderr in Python 作者:stack overflow 標準輸入流:鍵盤、掃碼槍等輸入裝置輸入的東西。 標準輸出流:螢幕、檔案等接受的東西 緩衝區:記憶體? 檔
Linux下的socket程式設計實踐(六)Unix域協議和socketpair傳遞檔案描述符
UNIX域協議並不是一個實際的協議族,而是在單個主機上執行客戶/伺服器通訊的一種方法,所用API與在不同主機上執行客戶/伺服器通訊所使用的API相同。UNIX域協議可以視為IPC方法之一,Unix域協
Linux網路程式設計基礎API--socket檔案描述符API
《Linux高效能伺服器程式設計》閱讀筆記: 1. 建立socket Linux系統上”一切皆是檔案“,socket也不例外,它是可讀/可寫/可控制/可關閉的檔案描述符。要實現socket通訊,雙方都需要建立各自的socket物件。 #include
linux c 通過檔案描述符獲取檔名
在linux中每個被開啟的檔案都會在/proc/self/fd/目錄中有記錄,其中(/proc/self/fd/檔案描述符號;這個檔案是符號檔案)的檔案就是檔案描述符所對應的檔案。 而readlink
Linux檔案描述符與C FILE之間的關係
1. linux檔案描述符 對於linux而言,所有對裝置和檔案的操作都使用檔案描述符來進行的。檔案描述符是一個非負的整數,它是一個索引值,指向核心中每個程序開啟檔案的記錄表。當開啟一個現存檔案或建立一個新檔案時,核心就向程序返回一個檔案描述符;當需要讀寫檔案時,也需
linux c通過檔案描述符以及write和read方法對檔案進行讀寫
1、write和read方法講解 #include<unistd.h> ssize_t read(int fd, void *buf,size_t count); fd為檔案描述符,buf