原创 一例TCP優雅關閉失敗SO_LINGER選項未起作用

通過setsockopt :SO_LINGER 選項可以指定函數close對面向連接的協議如何操作。 內核缺省close操作是立即返回,如果有數據殘留在套接口緩衝區中則系統將試着將這些數據發送給對方。 但是如果close時,接收緩衝區有未

原创 linux自動掛載U盤只讀的修復方法

自動掛載的U盤,變成只讀了,用root權限修改屬性也不可以。推測是U盤的文件系統損壞,操作系統爲了防止進一步毀壞文件系統,而將其設置成了只讀。 解決起來很簡單,插到windows系統上,提示U盤損壞,點擊修復即可。可能需要時間較長,耐心等

原创 Linux:如何在connect後獲得源端口?

利用getsockname()獲得sockaddr,在強轉成sockaddr_in結構體。裏面就包含了IP和端口信息。 getpeername()

原创 Linux動態鏈接庫同名符號裝載問題(二)

上一篇《Linux動態鏈接庫同名符號裝載問題(一)》中提到了動態鏈接的一些問題,本文主要討論動態加載時符號衝突的問題。PART1:RTLD_DEEPBIND打開動態鏈接導致段錯誤的現象可執行程序A通過dlopen動態加載library.s

原创 gitlab 11.10.4升級至12.3.4碰到的坑

起因:ACME客戶端版本過舊導致無法更新Lets Encrypt證書 lets encrypt證書的有效期是90天,使用以下兩個命令都無法更新證書 sudo gitlab-ctl renew-le-certs 和 sudo gi

原创 LD_PRELOAD和dlopen選項RTLD_DEEPBIND之間的優先級

先說結論:RTLD_DEEPBIND的優先級更高,在符號名發生衝突時,LD_PRELOAD的全局符號介入對於使用RTLD_DEEPBIND標誌位dlopen開的動態連接庫無效。 發現背景: 在使用《在應用程序中替換Linux中

原创 Windows系統 QQ/Print Screen截圖黑屏解決方案

百度到的方案不是要改註冊表就是關閉顯卡加速,不喜歡。 windows7以上版本,可以用系統自帶的snipping tool,支持全屏、矩形、活動窗口等截圖方式。 按windows鍵,搜索snipping tool即可。 ht

原创 不能用sendmsg提升原始套接字發送性能

使用原始套接字發送IP報文,通過setsocketopt中的IP_HDRINCL(Header Include)選項來設置socket,由應用而不是協議棧自動填充IP header。 原來是通過sendto發送,在實際測試中發

原创 Latex圖表設置中英文雙標題(非ccaption宏包)

Latex圖表設置中英文雙標題(非ccaption宏包) 雙語言標題的解決方案,搜到的答案基本是ccaption宏包。實際使用時,會編譯報錯: ! LaTeX Error: Command \captionwidth alrea

原创 使用C語言,對OpenSSL命令行加密的文件進行解密

需要使用代碼對shell命令加密的文件進行解密需要閱讀本文。 OpenSSL提供shell命令,以下命令可以對文件進行加密、解密。: > openssl enc -e -aes-128-cbc -k 123456 -p -nosa

原创 平定igb之“亂”

作者:dnk_admin 發佈:2012-06-04 21:50 分類:開發經驗, 軟件使用經驗 繼《tcpdump之“亂”象? | DNK的博客》===> 我作了下述實驗: Dell 2850(as5.5) +

原创 tcpdump發現不同ipid的數據包被拼接成一個大包

問題:發送端將3個大小爲1460的TCP報文用tcpreplay回放到捕包機,其ipid均不相同,但是捕包機只收到了一個爲4k+的大包。 原因:捕包機使用tcpdump捕包,需要經過網卡驅動,Linux2.6.29以上內核支持gro機制,

原创 C語言中switch case的類型比較機制

看下面的代碼:   int func(char i) { switch(i) { case 0x82: return 1; default: return 0; } } int main() { unsigne

原创 使用backtrace獲得動態鏈接庫的調用地址

  調用backtrace的時候,動態鏈接庫(.so)的調用地址不能直接調用addr2line得到代碼行數,stackoverflow上的方法比較麻煩 可以通過讀取/proc/pid/maps獲得動態能鏈接庫加載路徑。 int get_b

原创 epollwait操作同一個epoll_fd的線程安全問題

epollwait和epollctl都是線程安全的,但是當一個線程epollwait,而另一個線程用epollctl向同一個epoll_fd添加了一個監測fd後,epollwait有可能被改fd的讀/寫事件喚醒。 對於epollwait線