ליליבאום שוכנת על כף בקצה המערבי של האי, ובתקופה הנדונה הוקפה חומה מכל עבריה. שתיים מצלעות החומה נמתחו במקביל לקו החוף וגוננו על העיר מצד הים. שתי הצלעות הנותרות, הפונות לכיוון היבשה, היו מוקפות חפיר עמוק ורחב. הנמל נמצא מרחק-מה מצפון לעיר, והדרך ממנו אליה הוגנה ככל הנראה על ידי חומה ארוכה. שרטונות חול ורדדות היקשו על הכניסה לנמל והוסיפו להגנת העיר מצד הים. הקרתגים הציבו בליליבאום כ-10,000 חיילים שכירים, חלקם יוונים וחלקם קלטים, בפיקודו הכולל של מצביא בשם חימילקו. בעיר הצטופפה גם אוכלוסייה רבה, שכן זמן מה קודם למצור, בסביבות שנת 250 לפנה"ס, כבשו הקרתגים את סֶלִינוֹס, החריבוה עד היסוד והעבירו את תושביה אל ליליבאום.
פוליביוס מספר, כי שני הקונסולים יצאו מאיטליה בראש צי המונה 200 אוניות מלחמה (קווינקוורמות), העלו אותן על חופה של ליליבאום והתחברו עם חיל היבשה. צוותה של קווינקוורמה רומית מנה באותה תקופה כ-375 איש (282 חותרים, כ-20 מלחים וכ-75 חיילי צי), כך שמספר האנשים בצי היה בסביבות 75,000 איש. דיודורוס מרחיק לכת וכותב על צי המונה 240 אוניות מלחמה, 60 אוניות משא מונעות במשוטים ועוד מספר רב של ספינות משא קטנות יותר – מספר מוגזם לכל הדעות. אפשר, כדעת חוקרים אחדים, שהצי הרומי היה קטן הרבה יותר - 120 קווינקוורמות ובהן כ-33,000 איש. אשר לגודל הצבא שהגיע מפנורמוס, אורוסיוס מדבר על 4 לגיונות (כ-18,000 איש), מספר לא בלתי הגיוני, אם מביאים בחשבון שמשימתו העיקרית של חיל היבשה הייתה הפלישה לאפריקה.
תחילת המצור.
הרומאים הקימו שני מחנות, משני צדי העיר, ובין המחנות, לרוחבו של הכף מחוף אחד למשנהו, חפרו תעלה מוגנת בחומה ובדייק. היה זה השלב הראשון בלחימה נגד עיר בצורה – הטלת הסגר (obsidio) לניתוק הנצורים ממקורות אספקה ותגבורת. במלאכת המצור השתתפו לא רק חיילי הצבא וחיילי הצי, אלא גם המלחים והחותרים. ההתקפה החלה על המגדל הדרומי, הפונה לעבר אפריקה. לאחר שמילאו את החפיר והקימו לרגליו סוללת-עפר, קרבו את מכונות המצור והחלו הולמים בו באילי ניגוח. תוך כדי כך הוסיפו להאריך את הסוללה והסתערו במכונותיהם גם על המגדלים האחרים הסמוכים אליו.
הלחימה נמשכה יומם ולילה תחת מטר של אבנים וחצים, שנורו ממטולים וקטפולטות שעל החומות. חיילים קרתגים הגיחו מדי יום מן העיר וניסו להעלות באש את מכונות המצור. לחימה עזה התנהלה גם מתחת לפני הקרקע. כדי לסכל את הניסיונות לבקע את החומה, חפרו הקרתגים מינהרות מן הכיוון הנגדי לתוך הסוללות, במטרה למוטט את מגדלי הלחימה ומכונות המצור. למרות ההתנגדות העזה של אנשי חימילקו והאבדות הרבות הצליחו הרומאים להרוס או לערער כמה ממגדלי החומה. רוחם של הנצורים נפלה, וכשנדמה היה כי נגזר גורלה של העיר ליפול, החליטו כמה ממנהיגי החיילים השכירים לבגוד באדוניהם ולהסגירה לידי הרומאים. למזלם של הקרתגים נחשפה המזימה מבעוד מועד, והם נחלצו ממפלה גדולה.
פריצת ההסגר.
מאחר שאין זה אפשרי להטיל הסגר מן הים באמצעות אוניות משוט, היה נמלה של ליליבאום מקור הצלתה החשוב ביותר. שבועות אחדים לאחר תחילת המצור נשלחו מקרתגו 50 אוניות ועליהן אספקה, מזון ותגבורת של 10,000 חיילים. מפקד חיל המשלוח, חניבעל בן חמילקרת, עגן את אוניותיו באיי אייגוסאי, והמתין למזג אוויר מתאים שיאפשר לו לפרוץ אל הנמל במפתיע. כשהחלה מנשבת רוח גבית טובה, השיט את אוניותיו היישר לתוך הנמל, לנוכח עיניהם המשתאות של אויביו. הרומאים, שחששו כי אם יתקיפו ייסחפו אוניותיהם עם הרוח לתוך הנמל ויילכדו, לא עשו דבר.
התגבורת והאספקה עוררו בנצורים תקוות מחודשות, ואיפשרו לחימילקו להיערך להתקפה רבתי על מכונות המצור והצבא שלמרגלות החומות. בבוקר שלמחרת הגיחו עשרים אלף חייליו מן העיר, ותקפו בו זמנית את הסוללות למלוא אורכה של החומה. לאחר לחימה עקובת דם, תוך אבדות כבדות לשני הצדדים, נסוגו הקרתגים בלי להשיג את מטרתם. עוד באותו לילה יצא חניבעל עם חמישים אוניותיו בלי שהרומאים יבחינו בו והפליג אל דרפאנה.
זמן מה לאחר מכן, כאשר התעורר שוב הצורך לדעת מה מצב הנצורים, התנדב לפרוץ לנמל מפקד אוניית-מלחמה קרתגי נוסף – חניבעל המכונה "איש רודוס". הוא יצא באונייתו הפרטית מקרתגו, וכמו קודמו עגן באחד מאיי אייגוסאי, ממתין לשעת כושר. בבוקר שלמחרת התעוררה שוב הרוח המתאימה, והוא שט היישר לתוך הנמל תחת אפם של הרומאים. המפקד הרומי הציב עשר מאוניותיו המהירות ביותר משני צדי פתח הנמל, מוכנות להסתער וללכוד את האונייה הקרתגית מיד עם צאתה. אך גם הפעם הוכיח חניבעל "איש רודוס" את תעוזתו. הוא חלף במהירות על פני האוניות הרומיות כשהוא מותיר אותן משותקות תנועה, ולאחר שהתקדם מרחק קצר עצר את אונייתו, ובמשוטים פרושים לצדדים במצב הכן התריס נגד אויביו. הרומאים, שלא יכלו לאונייתו המהירה, לא נענו לתיגר ולא רדפו אחריו.
בעקבות הצלחת "איש רודוס" פרצו את ההסגר אוניות נוספות, שמפקדיהן הכירו את תנאי המקום. הרומאים ניסו לחסום את פתח הנמל בסוללות עפר, אבנים וקורות עצים מעוגנות, אך הרוח והגלים פירקו את מכשולי השיט ופיזרו אותם לכל עבר. התמזל מזלם של הרומאים וארבע-חתרית קרתגית שפרצה לנמל עלתה על שרטון ביציאה ממנו. הם מיהרו ללכוד אותה, העלו על סיפונה את הטובים שבחיילי הצי והציבו אותה בפתח הנמל. בעזרת אונייה זו עלה בידיהם ללכוד את "איש רודוס" באחת מגיחותיו הליליות. עתה, כשבידיהם שתי אוניות מובחרות ומהירות-שוט, הצליחו למנוע ניסיונות נוספים לפרוץ את ההסגר.
כישלון המצור ומפלת הצי בדרפאנה.
התקפה מחודשת של הקרתגים עלתה לרומאים באבדות ונזקים עצומים. רוח חזקה, שנשבה היישר מן החומות אל מגדלי הלחימה, המחסות הניידים ושאר מכונות המצור, ליבתה את האש שהעלו בהם החיילים הקרתגים המסתערים, וכל מאמצי הרומאים להצילם משריפה עלו בתוהו. תוך כדי כך הגיע זמנם של הקונסולים להתחלף. פובליוס קלאודיוס פולכר, הקונסול של שנת 249/248 לפנה"ס, שקיבל את הפיקוד על הצבא והצי בסיקיליה יחד עם עמיתו לוקיוס יוניוס פולוס, הפסיק את הפעולות להבקעת החומות, והורה להדק את ההסגר סביב העיר ולהניח לזמן לעשות את שלו. במקום זאת החליט לכבוש בהפתעה את הבסיס הימי הנוסף של הקרתגים בדרפאנה. מאחר שרבים מצוותי האוניות נהרגו או נפצעו בפעולות המצור, נאספו באיטליה עשרת אלפים חותרים ומלחים ונשלחו אל ליליבאום למלא את מקומם. פולכר יצא בראש הצי להתקפה על עיר הנמל, אך הוכה על ידי אדרבעל בקרב דרפאנה. 93 אוניות נפלו לידי האויב, מרביתן על צוותיהן. אחרי הניצחון בדרפאנה פשטו 30 אוניות קרתגיות בפיקוד חניבעל בן חמילקרת על מצבורי הדגן והאספקה של הצבא הרומאי בפנורמוס, והעבירו את השלל אל הנצורים בליליבאום.
אובדן אוניות האספקה.
באותו זמן היה פולוס, הקונסול השני, עסוק בהעברת דגן ואספקה לחיילים המטילים הסגר על ליליבאום וליחידות הצבא האחרות באי. הוא יצא מאיטליה בראש שיירה של 800 אוניות משא, מלוות ב-60 אוניות מלחמה, הגיע אל סירקוסאי ובה קבע את בסיסו. מאחר שחלק מהאוניות עדיין לא הגיעו לנמל והוא לא רצה לאבד זמן, שלח לפניו עם הקוואיסטורים אל ליליבאום כמחצית מאוניות האספקה ומספר קטן של אוניות מלחמה. כפי הנראה לא ידע עדיין על מפלת הצי המלחמתי בקרב דרפאנה, אחרת אין זה ברור מדוע יצאו אוניות המשא בלא ליווי הולם.
אדרבעל ניצל את הניצחון בדרפאנה ושיגר אל ליליבאום את קרתאלו בראש 100 אוניות-מלחמה – 30 מהן נפלו לידי הקרתגים בקרב דרפאנה – כשמשימתו להשמיד את אוניות המלחמה הרומיות שנותרו לשמור על הנמל. קרתאלו תקף עם שחר, חלק מהאוניות הצליח ללכוד ואחרות העלה באש. חימילקו, מפקד הקרתגים הנצורים, ניצל את המהומה שקמה עקב כך במחנה הרומאים, הגיח למחרת עם חייליו השכירים ותקף מן היבשה.
בינתיים הלכו והתקרבו אל ליליבאום אוניות האספקה שנשלחו מסירקוסאי לפני עיקר הצי. קרתאלו הסתער לעברן מן המארב, אך אוניות המלחמה הרומיות נמנעו מלהיכנס לקרב בשל נחיתותם המספרית. במקום זאת תפסו מחסה במפרצון סמוך. החיילים הרומיים עלו על החוף ונערכו להדוף את התקפת האוניות הקרתגיות בירי קטפולטות ובליסטראות מן היבשה. התלקח קרב, שבסופו – לדברי דיודורוס - הצליחו הקרתגים להטביע 50 אוניות משא ו-17 אוניות מלחמה רומיות ולהסב נזקים ל-13 אוניות מלחמה אחרות.
אובדן הצי ליד קמארינה.
פולוס, שלא ידע דבר על שאירע לאלו שהפליגו לפניו, יצא מסירקוסאי עם עיקר הצי ושאר אוניות האספקה ושט לאורך החוף הדרומי אל ליליבאום. כשראה את הצי הקרתגי בפיקוד קרתאלו יוצא לקראתו, נמנע מלהיכנס עמו לקרב ועגן את אוניותיו ליד חוף סלעי ומסוכן ליד קמארינה, "בחושבו שעדיף לסבול כל אשר יקרה ובלבד שלא ימסור במו ידיו את צבאו לאויבים." איתרע מזלם של הרומאים ופרצה סערה עזה שהשמידה את שני חלקי הצי. הצי הקרתגי, שאנשיו הכירו את טבע המקום, הצליח להימלט מבעוד מועד וניצל. דיודורוס מספר, כי באסון אבדו כל אוניות המשא הרומיות ומבין 103 אוניות מלחמה רק שתיים ניצלו.
נפילת העיר לידי הרומאים.
בעקבות שרשרת הפורענויות הללו הדירו הרומאים את רגליהם מן הזירה הימית ולא הקימו צי חדש במקום זה שאבד. הם הוסיפו אומנם להטיל הסגר יבשתי על ליליבאום, אך הוא לא היה יעיל. מאחר שחסרו צי מלחמתי, לא יכלו למנוע מן הקרתגים לספק את צורכי הנצורים דרך הים. תושבי העיר שיקמו את חומותיה ההרוסות והחזיקו מעמד עד סופה של המלחמה.